Chu*_*huu 9 c++ struct copy-constructor c++14
我们有以下方法来测试我们的结构是否是POD.它总是返回true:
bool podTest() {
struct podTest {
int count;
int x[];
};
return std::is_pod<podTest>::value; //Always returns true
}
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.现在我们进行一次更改并删除复制构造函数:
bool podTest() {
struct podTest {
podTest(const podTest&) = delete;
int count;
int x[];
};
return std::is_pod<podTest>::value; //Always returns false
}
Run Code Online (Sandbox Code Playgroud)
这总是返回false.在阅读了is_pod我的定义后,我仍在努力了解它违反了什么要求.我错过了什么?
这是使用gcc 6.1在godbolt上编译的 -std=c++14
啊哈!
来自[班级]:
POD结构是一个非联合类,既是普通类,也是标准布局类
一个简单的类是:
一个普通的类是一个可以轻易复制的类,它有一个或多个默认构造函数(12.1),所有这些都是微不足道的或被删除的,并且至少有一个不被删除.
但是在[class.copy]中:
如果没有用户声明的类
X构造函数,则不会将没有参数的非显式构造函数隐式声明为defaultaulted(8.4).
你podTest,当你明确地删除拷贝构造函数,没有默认构造函数.所以这不是一个微不足道的课程,所以它不是POD.如果你加入:
podTest() = default;
Run Code Online (Sandbox Code Playgroud)
然后它将再次成为POD.