C++:POD 类型可以包含 const 非指针成员吗?

use*_*931 7 c++ standards

#include <iostream>

struct A {
  const int test_;
};

static_assert(std::is_pod<A>::value, "must be POD type");

int main()
{
    std::cout<<"Hello World";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在 Clang 和 GCC 上std::is_pod<A>::valuetrue,而在 ICC 和 MSVC 上是false

Ifconst int test_;被替换为int test_;or const int* test_then 它也会传递 ICC 和 MSVC。

标准怎么说?

Rya*_*ing 4

N4659

12/10

POD 结构是一个非联合类,它既是普通类又是标准布局类,并且没有非 POD 结构、非 POD 联合(或此类类型的数组)类型的非静态数据成员。

对于琐碎的事

12/6

平凡类是一种可平凡复制并具有一个或多个默认构造函数的类

没有可用的默认构造函数。

此外,对于可简单复制,要求包括

12/6.2

至少有一个未删除的复制构造函数、移动构造函数、复制赋值运算符或移动赋值运算符

由于您包含 a const int,因此它不是可简单复制的(没有赋值运算符),因此它不是 pod

^ 我错了,它可以通过构造函数来复制。我把“或”误读成了“和”