我已经在一个类中声明了一个布尔变量bool abc;
,并认为它默认为false。我的程序if (abc)
中的if条件证明是真的,所以我输出abc的值,并且看到它包含值55.这是正常的吗?我们是否总是必须分配'bool abc = false'以确保它是错误的?默认情况下,布尔变量并不总是假?
回答
是的,你应该总是初始化你的变量。直到你亲身了解时间,并且没有必要明确这样做时,无论如何你都应该一直这样做。到那时......嗯......为什么要停止一个好习惯?
要初始化一个bool为false它足以为默认构造它:
struct X
{
bool b;
X() : b() {}
};
我喜欢添加显式布尔文字false(对我来说,使它更具可读性(尽管技术上与你的没有区别))。 – 2011-01-07 08:48:12
谈到原始的内置数据类型(布尔,焦炭,wchar_t的,short,int和长,浮动,双,long double),根据C++标准,只有全局变量的默认值为零,如果它们没有明确初始化。
对于本地变量,编译器不需要清理它们分配的内存的内容。局部变量 - 如果未明确初始化 - 将包含任意值。
是的。您需要执行bool x=false
或bool x(false)
。未初始化的基元可能具有任何值。
是的。 ALWAYS在使用前初始化您的变量。即使该语言保证他们将具有特定的价值。如果你不能强迫自己,得到一个会抱怨的编译器,然后让自己做到这一点。 :)
但是,不要初始化值,除非它真的有一个含义,他们被初始化。举例来说,如果你有一个这样的循环(我并不是说这是一个好代码,这只是一个例子):
int i = 0;
while ((i = getNum()) == 5)
{
}
不要初始化i
为零像我一样。这是毫无意义的,尽管它关闭了编译器,但它引入了可能性,你会忘记它,然后你的代码会被搞乱。如果您可以强制自己在适当的时候初始化 - 不多也不少 - 那么从wrong code will look wrong even at just a glance开始,您将更容易进行调试。
所以,在一行中:永远不要初始化,以防止编译器抱怨,但始终在使用前初始化。
默认情况下,只有全局变量被赋值为0(false),任何局部变量都会被赋予一个非零垃圾值,该值将在布尔变量中计算为true。
- 1. 默认情况下,JavaScript变量的布尔值是什么?
- 2. ,async:默认情况下是否为假?
- 3. 一次布尔变量虚假不要在其他情况下
- 4. 产量和默认情况||不输出默认情况下
- 5. 是否有任何情况下,一个私有布尔(原始)字段变量默认为非假的东西?
- 6. Mongoose布尔默认假
- 7. 默认情况下Python变量是全局变量吗?
- 8. rails_admin变化布尔默认图标真假,而不是字符串“真”和“假”
- 9. C#总是假布尔
- 10. DropDownListFor(...)默认情况下选择布尔值false
- 11. 默认情况下iphone上是否有日文假名字体?
- 12. JavaScript变量的值,默认情况下PHP变量,并装载片内容
- 13. 默认情况下是GLfloat还是GLdouble?
- 14. JPA布尔默认值=假@Transient
- 15. 默认值为静态布尔变量
- 16. 如何在默认情况下将Django布尔值设置为True,它是false?
- 17. 安卓:默认情况下
- 18. 默认情况下,法国
- 19. 默认情况下,Constexpr lambda?
- 20. 默认情况下在VBox
- 21. 在默认情况下
- 22. FactoryGirl在默认情况下
- 23. 麻烦SWITCH JavaScript的执行总是默认情况下
- 24. Scala模式匹配总是默认情况下
- 25. 默认情况下总是执行开关
- 26. ,默认情况下是安全的?
- 27. 默认情况下python-excel不匹配
- 28. 默认情况下不会执行C++
- 29. DeltaImport默认情况下不会发生
- 30. 引导3.0.2默认情况下不
为什么:http://stackoverflow.com/questions/1910832/c-why-arent-pointers-initialized-with-null-by-default/1910992#1910992 – 2011-01-07 08:52:18
[请注意,读取未初始化的变量会导致UB 。](http://stackoverflow.com/questions/4259885/why-do-i-see-strange-values-when-i-print-uninitialized-variables/4259991#4259991)只是不这样做。 – GManNickG 2011-01-07 23:02:38
在这种情况下可能出现的一个'有趣'的错误是b和!b评估为true – 2012-08-02 09:06:42