默认情况下,布尔变量并不总是false?

Nav*_*Nav 41 c++ syntax

我在类中声明了一个布尔变量bool abc;,并认为默认情况下它是假的.我的程序中的if条件if (abc)结果为true,所以我输出abc的值,并看到它包含值55.这是正常的吗?我们是否总是要指定'bool abc = false'以确保它是假的?

Nyl*_*ile 36

谈论原始内置数据类型(bool,char,wchar_t,short,int,long,float,double,long double),根据C++标准,如果没有显式初始化,则只有全局变量的默认值为零.

对于局部变量,编译器不需要清理分配给它们的内存内容.局部变量 - 如果没有显式初始化 - 将包含任意值.

  • 从技术上讲,它是`静态存储持续时间'的变量.全局变量是这种变量的成员. (7认同)

Edw*_*nge 34

是的,您应该始终初始化变量.直到你亲密地了解它的时间并且没有必要明确地这样做,你应该一直这样做,无论如何.到那时......好吧......为什么要戒掉一个好习惯?

要将bool初始化为false,默认构造它就足够了:

struct X
{
  bool b;
  X() : b() {}
};
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢添加显式的布尔文字false(对我而言,它使它更具可读性(虽然技术上与你的不同)). (11认同)

Reg*_*ans 6

默认情况下,只有全局变量被赋值为0(false),任何局部变量都被赋予非零垃圾值,这将在布尔变量中求值为true.


Kit*_*YMG 5

是的。您需要执行bool x=falsebool x(false)。未初始化的原语可能具有任何值。

参见维基百科