这是C++ 11中的结构POD吗?

Sjo*_*erd 10 c++ pod c++11

这个结构是C++ 11中的POD吗?

struct B
{
  int a;
  B(int aa) : a(aa) {}
  B() = default;
};
Run Code Online (Sandbox Code Playgroud)

请注意,这个问题是关于C++ 11的明确问题.我知道这个类不是C++ 98中的POD,也不是C++ 03.

有关C++ 11中POD的解释,请参阅普通与标准布局与POD

(受此问题的启发:是否有编译时func /宏来确定C++ 0x结构是否为POD?)

R. *_*des 14

是的,根据新规则它是POD .

如果你查看新标准的第§8.4.2/ 4段,你可以看到如果构造函数在第一个声明中是默认的,那么它不是用户提供的:

显式默认函数和隐式声明函数统称为默认函数,实现应为它们提供隐式定义(§12.1§12.4,§12.8),这可能意味着将它们定义为已删除.如果特殊成员函数是 用户声明的,并且在其第一个声明中未明确默认或删除,则由用户提供.(......)

您可以使用std::is_pod类型特征让编译器为您测试static_assert.

static_assert(std::is_pod<B>::value, "B should be a POD");
Run Code Online (Sandbox Code Playgroud)