【发布时间】:2015-07-19 09:32:10
【问题描述】:
有没有办法强制将默认的初始化构造函数用于 POD 类型。让所有的值如整数一样初始化为零?
struct MyPod
{
int a; // whether a is initialized to zero is dependent on creation method
};
struct MyOtherNonPod
{
int b;
MyOtherNonPod() : b(0) // b initialized to zero regardless of creation method
{}
};
MyPod* pod = new MyPod; // pod->a not initialized
MyOhterNonPod* otherPod = new MyOtherNonPod; // otherPod->b is initialized to zero
有没有一种方法可以做到这一点,而不必定义构造函数并手动初始化所有变量?但只是强制始终调用默认的初始化构造函数?
MyPod* pod = new MyPod{}; // pod->a is default initialized to zero
无论{} 是否存在,有没有办法强制使用上述构造函数?我的 POD 类中有很多变量名称很冗长,我宁愿消除类不会被初始化为零的不确定性,具体取决于我是否默认初始化。无需手动全部设置。
【问题讨论】:
-
MyOtherPod具有用户指定的构造函数,因此不是 POD 对象。 open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf -
一个选项是
struct MyPodV: MyPod { MyPodV(): MyPod() {} };。MyPodV不是 POD,但基类是,因此可能适合您的要求。 -
@MattMcNabb 是的,这可能是我见过的最好的解决方案,谢谢!如果您将其发布为答案,我会将其标记为解决方案。
标签: c++