这个结构是C ++ 11中的POD吗?
struct B
{
int a;
B(int aa) : a(aa) {}
B() = default;
};
请注意,这个问题是明确的 C ++ 11。我知道这个类不是C ++ 98中的POD,也不是C ++ 03。
有关C ++ 11中POD的说明,请参阅 平凡与标准布局与POD
(灵感来自这个问题: 是否有编译时func /宏来确定C ++ 0x结构是否为POD? )
这个结构是C ++ 11中的POD吗?
struct B
{
int a;
B(int aa) : a(aa) {}
B() = default;
};
请注意,这个问题是明确的 C ++ 11。我知道这个类不是C ++ 98中的POD,也不是C ++ 03。
有关C ++ 11中POD的说明,请参阅 平凡与标准布局与POD
(灵感来自这个问题: 是否有编译时func /宏来确定C ++ 0x结构是否为POD? )
是的,这是一个POD根据 新规则。
如果查看新标准的第8.6.2 / 4段,您可以看到如果构造函数在第一个声明中是默认的,则不是用户提供的:
明确默认的函数和隐式声明的函数是 统称 默认 功能和实施应 为它们提供隐式定义(§12.1§12.4,§12.8),这可能是 意味着将它们定义为已删除一个特殊的成员函数是 用户提供的 如果它是用户声明的,并且没有明确默认或 在第一份声明中删除。 (......)
你可以使用 std::is_pod
类型trait有编译器 测试一下 适合你 static_assert
。
static_assert(std::is_pod<B>::value, "B should be a POD");