我已经在一个类中声明了一个布尔变量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. ,async:默认情况下是否为假?
- 2. 产量和默认情况||不输出默认情况下
- 3. 默认情况下Python变量是全局变量吗?
- 4. rails_admin变化布尔默认图标真假,而不是字符串“真”和“假”
- 5. DropDownListFor(...)默认情况下选择布尔值false
- 6. 默认情况下iphone上是否有日文假名字体?
- 7. JavaScript变量的值,默认情况下PHP变量,并装载片内容
- 8. 默认情况下,法国
- 9. 安卓:默认情况下
- 10. Scala模式匹配总是默认情况下
- 11. 默认情况下总是执行开关
- 12. 麻烦SWITCH JavaScript的执行总是默认情况下
- 13. DeltaImport默认情况下不会发生
- 14. 默认情况下不会执行C++
- 15. 默认情况下python-excel不匹配
- 16. 如何得到默认情况下,即“假”
- 17. 布尔变量总是返回false
- 18. 默认情况下,Rails是否具有* zero *并发性?
- 19. 默认情况下修改默认命令:默认命令为
- 20. 默认情况下,Java构造函数是不是公共的?
- 21. 设置应用程序实现 - 默认情况下,布尔值设置为“no”
- 22. 实体框架:默认情况下,将tinyint映射到布尔值
- 23. 为什么Map在默认情况下在Scala中不可变?
- 24. JQuery UI对话框在默认情况下不传递表单变量
- 25. jQuery的数据表崩溃默认情况下,在默认情况下是这样
- 26. 默认情况下系统PIP而不是virtualenv PIP?
- 27. 表仅在交互时显示,而不是默认情况下
- 28. PHP的情况下工作,但不是默认
- 29. 在默认情况下的UITableViewCell
- 30. 默认情况下,AppEngine主键
为什么: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