我们有以下方法可以测试我们的结构是否为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。

10-08 08:21