C++ 中默认初始化的原始类型是什么?

2022-01-18 00:00:00 initialization c++

当我使用初始化列表时:

When I use an initialization list:

struct Struct {
    Struct() : memberVariable() {}
    int memberVariable;
};

原始类型(intboolfloatenum、指针)成员变量为默认初始化.它获得实现的值是定义的还是所有实现都相同?

the primitive type (int, bool, float, enum, pointer) member variable is default-initialied. Is the value it gets implementation defined or is it the same for all implementations?

推荐答案

你说的不对.该对象不是默认初始化的,而是值初始化的.而且它的价值是明确的

You are not correct. The object is not default-initialized but value-initialized. And its value is well-defined

int = 0, 
bool = false, 
float = 0.0f,  
enum = (enum type)0, 
pointer = null pointer
pointer to member = null member pointer

请注意,零在任何枚举的值范围内,即使它不包含具有该值的显式枚举数,因此将枚举变量初始化为该值是安全的.

Note that zero is in the range of values for any enumeration, even if it doesn't contain an explicit enumerator with that vaue, so it's safe to initialize an enumeration variable to that value.

特别是对于指向数据成员的指针,实际使用的表示不是全零位.在至少 GCC 和 Clang 使用的所谓 C++ Itanium ABI 中,指向数据成员的指针具有全一位空表示.

In particular for pointer to data members, the representation used in practice is not all-zero bits. In the so-called C++ Itanium ABI used by at least GCC and Clang, pointer to data members have an all-one bits null representation.

相关文章