Possible Duplicate:
Why is it an error to use an empty set of brackets to call a constructor with no arguments?
In an answer to this question it's said that
ints are default-constructed as 0, as if you initialized them with int(). Other primitive types are initialized similarly (e.g., double(), long(), bool(), etc.).
Just while I was explaining this to a colleague of mine I made up the following code, compiled (gcc-4.3.4) and ran, and observed unexpected behavior.
#include <iostream> int main() { int i(); std::cout << i << std::endl; // output is 1 }
Why is the output 1
and not 0
?
There is no such thing as a default copy constructor. There are default constructors and copy constructors and they are different things.
Like C++, Java also supports a copy constructor. But, unlike C++, Java doesn't create a default copy constructor if you don't write your own.
A default constructor is a constructor that either has no parameters, or if it has parameters, all the parameters have default values. If no user-defined constructor exists for a class A and one is needed, the compiler implicitly declares a default parameterless constructor A::A() .
Unlike the default constructor, the body of the copy constructor created by the compiler is not empty, it copies all data members of the passed object to the object which is being created.
Most vexing parse comes into play here. You're actually declaring a function i
, not an int
variable. It shouldn't even compile (unless you actually have a function i
defined somewhere... do you?).
To value-initialize the int, you need:
int i = int();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With