POD的概念已分为琐碎和标准布局概念。您可以通过标准类型特征查询这些属性。
类B
不是 POD,因为它不是微不足道的。这不是微不足道的,因为它有一个用户提供的默认构造函数。要么省略它,要么使用新的 C++11=default
语法。
#include <type_traits>
#include <iostream>
#include <ios>
struct A
{
int i;
};
struct B
{
B(){}
int i;
};
struct C
{
C() = default;
int i;
};
int main()
{
std::cout << std::boolalpha << std::is_pod<A>::value << " ";
std::cout << std::boolalpha << std::is_trivial<A>::value << " ";
std::cout << std::boolalpha << std::is_standard_layout<A>::value << "\n";
std::cout << std::boolalpha << std::is_pod<B>::value << " ";
std::cout << std::boolalpha << std::is_trivial<B>::value << " ";
std::cout << std::boolalpha << std::is_standard_layout<B>::value << "\n";
std::cout << std::boolalpha << std::is_pod<C>::value << " ";
std::cout << std::boolalpha << std::is_trivial<C>::value << " ";
std::cout << std::boolalpha << std::is_standard_layout<C>::value << "\n";
}
在线输出:
true true true
false false true
true true true