c++ - 如何理解这个 POD 规则

标签 c++ c++11 typetraits

struct A
{
  int i;
};

struct B
{
 B(){} 
 int i;
}

大家好

我知道“POD 是指普通旧数据类型,根据定义它不能有用户定义的构造函数”。 但是我不明白为什么这个规则在“definition have an user-defined default-con”时有效。

它们的内存布局没有区别,为什么A型是POD,B型不是?

最佳答案

原因很简单。一旦你定义了一个构造函数(任何 构造函数),该语言假定该类需要一些 某种初始化;只是复制其图像中的位 不足以创建新实例。其中之一 POD 的一个重要特征是它们可以被 memcpy。

总而言之,编译器查看类的内容 确定它是否是 POD(除了查看是否有任何 成员是 PODS)。它会查看您是否定义了任何内容 可能影响初始化、赋值或 销毁这些成员。

关于c++ - 如何理解这个 POD 规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17694819/

相关文章:

c++ - 使用 CPP 读取 CSV 文件,使用 CMake 文件编译代码

c++ - 在函数方法中使用 std::thread

c++ - Dijkstra 最短路径,步数最少

c++ - 如何定义递归类型?

c++ - 使用 C++ type_traits 避免缩小转换

c++ - 程序不能用较新版本的 g++ 编译

c++ - std::list 迭代器,没有运算符 "="匹配这些操作数

c++ - 如果我创建一个修改值的迭代器,静态成员 "reference"应该是什么类型?

c++ - 为什么 & 号在 `std::is_member_function_pointer` 中?

c++ - 三角形带上的纹理坐标