Aren't Boolean variables always false by default?

C++Syntax

C++ Problem Overview


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?

C++ Solutions


Solution 1 - C++

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.

Solution 2 - C++

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() {}
};

Solution 3 - C++

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.

Solution 4 - C++

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.

Solution 5 - C++

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

See Wikipedia

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionNavView Question on Stackoverflow
Solution 1 - C++Nylon SmileView Answer on Stackoverflow
Solution 2 - C++Edward StrangeView Answer on Stackoverflow
Solution 3 - C++Regan KoopmansView Answer on Stackoverflow
Solution 4 - C++user541686View Answer on Stackoverflow
Solution 5 - C++KitsuneYMGView Answer on Stackoverflow