说我要做这样的事情:
class blah
{
public:
bool exampleVar;
};
blah exampleArray[4];
exampleArray[1].exampleVar = true;
Run Code Online (Sandbox Code Playgroud)
在exampleArray中,现在有3个未设置的exampleVar实例,没有我设置它们的默认值是什么?
Pra*_*ian 45
默认值取决于exampleArray声明的范围.如果它是函数的本地值,则值将是随机的,无论这些堆栈位置恰好是什么值.如果它是静态的或在文件范围(全局)声明,则值将初始化为零.
这是一个演示.如果需要成员变量具有确定性值,请始终在构造函数中初始化它.
class blah
{
public:
blah()
: exampleVar(false)
{}
bool exampleVar;
};
Run Code Online (Sandbox Code Playgroud)
编辑:
使用C++ 11不再需要上例中的构造函数.数据成员可以在类声明本身中初始化.
class blah
{
public:
bool exampleVar = false;
};
Run Code Online (Sandbox Code Playgroud)
如果需要,可以由用户定义的构造函数覆盖此内联默认值.
struct x
{
bool b;
x() : b() { }
}
...
x myx;
Run Code Online (Sandbox Code Playgroud)
在这种情况下,myx.b将为false.
struct x
{
bool b;
}
...
x myx;
Run Code Online (Sandbox Code Playgroud)
在这种情况下,myx.b将是不可预测的,它将是分配myx之前内存位置的值.
由于在C和C++中,false值定义为0,而true值定义为非零,因此随机地址位置包含真值而不是false值的可能性更大.通常,在C++中,sizeof(bool)为1,表示8位.内存的随机位置是错误的,有超过255种可能性,这就解释了为什么你将默认的布尔值视为真.
| 归档时间: |
|
| 查看次数: |
70519 次 |
| 最近记录: |