c++11普通老对象的默认值
c++11 plain old object default value
如何在C++11中初始化POD(纯旧数据)的成员变量?
class A {
public:
int theAnswer; // this is not initialized
};
static_assert(std::is_pod<A>::value, "A must be a plain old object");
class B {
public:
int theAnswer { 42 }; // this should initialize to 42
};
static_assert(std::is_pod<B>::value, "B must be a plain old object"); // ERROR
class C {
public:
C() : theAnswer { 42 } { } // Obviously, this is not a trivial default constructor, so it does not work
int theAnswer;
};
static_assert(std::is_pod<C>::value, "C must be a plain old object"); // ERROR
在初始化整个对象的地方执行。一个普通的老数据对象就是:普通的旧数据,没有不变量、初始化或任何花哨的东西。如果您想要初始化,那么它不是POD。
但也许你实际上并不需要POD。也许微不足道的可复制性就足够了?如果你想做的只是对象之间的内存,那么你要寻找的特性是可复制性,而不是POD。
这里有一些标准解释了为什么不能在类内部初始化POD成员。
[class]/10
:
POD结构是一个非并集类,既是平凡类又是标准布局类
[class]/6
:
平凡类是一个具有默认构造函数(12.1)、没有非平凡默认构造函数并且可平凡复制的类。
[class.ctor]/4
:
如果默认构造函数不是用户提供的,并且:
--它的类没有虚拟函数(10.3),也没有虚拟基类(10.1),并且
--其类的非静态数据成员都没有大括号或相等的初始值设定项,并且
--其类的所有直接基类都有琐碎的默认构造函数,并且
--对于类类型(或其数组)的类的所有非静态数据成员,每个此类都有一个琐碎的默认构造函数。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 具有默认值的引用获取函数
- 当给定默认值时,为什么此模板参数推导失败
- 从具有默认值的部分指定模板类继承时发生SWIG错误,具有不带默认值的正向声明
- 格式化浮点值:返回默认值
- 如何将数组部分初始化为某个默认值?
- asn1c 不会从 asn.1 模块中提取八位字节字符串的默认值
- 为什么在使用指针时不采用类成员的默认值,而不是直接实例化对象时?
- 默认函数对象值作为要使用lambda调用的函数参数
- 如何在以下C 代码中在同一对象上调用默认值和复制构造函数
- 将具有默认值的构造函数定义为组合对象的私有字段
- 为什么我的对象中的变量被重置为默认值
- 默认值初始化作为对象的数据成员
- 为什么我的堆栈对象在创建后会更改默认值
- C++函数,一个对象的默认值是多少
- c++11普通老对象的默认值
- c++在不创建新对象的情况下获取类成员的默认值
- 可以为新创建的对象自动填充protobuffer默认值
- 如果参数中未传递任何值,如何创建具有默认值的对象
- 是否可以使用构造函数或对象作为其他类方法的参数默认值?