在C ++ 98中
12.6.2 / 4 :在完成对类X的构造函数的调用之后,如果在构造函数中没有指定X的成员 MEM-初始化,也没有默认初始化, 也没有在构造函数的主体执行期间初始化,该成员具有不确定的价值。
是什么 也没有在构造函数的主体执行期间初始化 意思?会员可以吗? 初始化 在构造函数体内?
在C ++ 98中
12.6.2 / 4 :在完成对类X的构造函数的调用之后,如果在构造函数中没有指定X的成员 MEM-初始化,也没有默认初始化, 也没有在构造函数的主体执行期间初始化,该成员具有不确定的价值。
是什么 也没有在构造函数的主体执行期间初始化 意思?会员可以吗? 初始化 在构造函数体内?
也没有在构造函数的主体执行期间初始化 是不正确的恕我直言。
在C ++ 03中改变了措辞 也没有初始化 (在C ++ 98中)到 也没有给出价值
在完成对类X的构造函数的调用之后,如果在构造函数的mem-initializers中既未指定X的成员,也未在default-initialized中指定,也未对值进行初始化, 也没有给出价值 在执行构造函数体时,该成员具有不确定的值。
也没有在构造函数的主体执行期间初始化 是不正确的恕我直言。
在C ++ 03中改变了措辞 也没有初始化 (在C ++ 98中)到 也没有给出价值
在完成对类X的构造函数的调用之后,如果在构造函数的mem-initializers中既未指定X的成员,也未在default-initialized中指定,也未对值进行初始化, 也没有给出价值 在执行构造函数体时,该成员具有不确定的值。
它实际上非常简单。 class / struct成员可以包含具有默认构造函数的对象,但如果它们不包含,并且您不打算在初始化列表中为它们赋值,也不在构造函数的主体内设置它们,那么基本上就是它们的内存占用 - 无论是从堆栈还是堆中为它们争吵 - 仍然会有旧垃圾,即不确定的价值。
考虑:
struct X
{
X() : x1(1) { x2 = 2; }
double x1, x2, x3;
std::string x4;
};
这里, x1
和 x2
由...明确初始化 X
的构造函数,和 x4
- 成为一个 std::string
- 默认构造为“”/长度0。 x3
但是,它可以是任何东西 - 并且不应该在它被设置之后被读取(它是未定义的行为并且实际上可能在某些系统上咬合) - 考虑它占用的内存的位模式甚至可能不是一个有效的值。 double,因此从中读取可能会触发一些CPU异常/陷阱/中断)。