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)
,
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() {}
};
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.
Yes. You need to either do bool x=false
or bool x(false)
. Primitives that are not initialized may have any value.
See Wikipedia
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.
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.