int/double/等的构造函数语义是:
int a; // uninitialized
int b = int(); // zero initialized
int c = int(4); // four是否有可能定义一个具有完全相同行为的类?即同时具有未初始化和已初始化的默认构造函数的构造函数?我认为这是不可能的,目前通过创建一个构造函数来解决这个问题,这个构造函数只在调用0时编译,但希望确保没有一种方法可以精确地模仿基本类型。
发布于 2012-04-12 05:05:39
如果未定义任何构造函数:
struct A { int x; };
A a; // default-initialized (unintialized)
A b = A(); // value-initialized
A c = { 4 }; // four发布于 2012-04-12 05:01:34
这是不可能的,因为与内置类型相反,您的类构造函数将始终被调用( be called )。
如果你真的想做“未初始化”的对象(为什么?由于未初始化的变量,你的bug还不够多吗?),你可能不得不使用放置new的技巧。
发布于 2012-04-12 05:14:14
“未初始化的结构”是矛盾的。
构造中缺少初始化只是由于错误(无法递归构造整个对象)。
如果C++类有构造函数,就会调用它。如果由于任何原因不能调用它,那么这种情况就是错误的(例如,传递了错误的构造参数,这些参数与任何构造函数都不匹配)。
C++类可以包含基本类型的成员,其构造函数可以忽略对这些成员的初始化。
这可以用于优化:如果您有一个复杂的初始化,您可以避免写入这些成员的开销。
这就是这样做的方式,而不是试图创建一个可以保持未初始化的整个类。
如果你真的想要它,一种模拟它的方法是创建一个没有任何构造函数的POD (普通老式数据结构),然后使用一些额外的技术,以便可以以保证其初始化的方式使用它。例如,从它创建一个添加构造的派生类,或者使用奇怪的重复模板模式,等等。
然后,如果您不想初始化POD,您仍然可以直接使用它。
https://stackoverflow.com/questions/10113872
复制相似问题