我们有以下方法可以测试我们的结构是否为POD。它总是返回true:
bool podTest() {
struct podTest {
int count;
int x[];
};
return std::is_pod<podTest>::value; //Always returns true
}
到现在为止还挺好。现在,我们进行更改并删除复制构造函数:
bool podTest() {
struct podTest {
podTest(const podTest&) = delete;
int count;
int x[];
};
return std::is_pod<podTest>::value; //Always returns false
}
这总是返回false。在阅读了
is_pod
的定义之后,我仍在努力了解它违反了什么要求。我想念什么?正在使用gcc 6.1在boltbolt上使用
-std=c++14
进行编译 最佳答案
啊哈!
来自[class]:
一个简单的类是:
但是在[class.copy]中:
当您明确删除拷贝构造函数时,您的podTest
没有默认的构造函数。因此,它不是一个简单的类,所以它不是一个POD。如果添加:
podTest() = default;
然后它将再次成为POD。