From the wikipedia page for copy constructors:
X a = X();
// valid given X(const X& copy_from_me) but not valid given X(X& copy_from_me)
// because the second wants a non-const X&
// to create a, the compiler first creates a temporary by invoking the default constructor
// of X, then uses the copy constructor to initialize as a copy of that temporary.
// For some compilers both versions actually work but this behaviour should not be relied
// upon because it's non-standard.
Specifically the part:
" the compiler first creates a temporary by invoking the default constructor of X, then uses the copy constructor to initialize as a copy of that temporary. "
My question is (assuming this is correct) why is this so? From the code, I would guess that the compiler would use the assignment operator after constructing an X.
I'm guessing its because assignment takes place in the same expression as initialization?
Also, what would be the reason to use this formula, rather than just a normal initialization X a;
or if you want to copy X a(b);
?