Aren't Boolean variables always false by default?

会有一股神秘感。 提交于 2021-01-20 15:21:27

问题


I had declared a Boolean variable bool abc; in a class and thought that it would be false by default. An if condition in my program, if (abc), turned out to be true, so I output the value of abc, and saw that it contained the value 55. Is this normal?

Do we always have to assign 'bool abc=false' to be sure that it is false?


回答1:


Yes, you should always initialize your variables. Until you intimately learn the times when it is and isn't necessary to do so explicitly, you should do it all the time, no matter what. And by then...well...why stop a good habit?

To initialize a bool to false it's sufficient to default construct it:

struct X
{
  bool b;
  X() : b() {}
};



回答2:


Talking about primitive built-in data types (bool, char, wchar_t, short, int, long, float, double, long double), according to C++ standard, only global variables get a default value of zero if they are not explicitly initialized.

For local variables it's not required for the complier to clean up the content of the memory they are assigned to. A local variable -- if not explicitly initialized -- will contain an arbitrary value.




回答3:


Only global variables are assigned 0 (false) by default. Any local variables are given a non-zero garbage value, which would evaluate to true in a boolean variable.




回答4:


Yes. Always initialize your variables before use. Even if the language guarantees that they will have specific values. If you can't force yourself, get a compiler that will complain, and then make yourself do that. :)

However, don't initialize values unless it really has a meaning for them to be initialized. For example, if you have a loop like this (I'm not saying this is good code, it's just an example):

int i = 0;
while ((i = getNum()) == 5)
{
}

Don't initialize i to zero like I did. It makes no sense, and while it shuts up the compiler, it introduces the possibility that you'll forget it and then your code will be messed up. If you can force yourself to initialize only at the right times -- no more, no less -- then you'll make debugging a heck of a lot easier, since your wrong code will look wrong even at just a glance.

So, in one line: Never initialize just to prevent the compiler from complaining, but always initialize before use.




回答5:


Yes. You need to either do bool x=false or bool x(false). Primitives that are not initialized may have any value.

See Wikipedia



来源:https://stackoverflow.com/questions/4622225/arent-boolean-variables-always-false-by-default

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!