If a have a class with both standard and copy constructors
class Ex{
//constructor definitions
}
and a function that takes it as an argument (by value)
void F(Ex _exin){...}
take the following piece of code:
Ex A;
F(A); //F's parameter is copy constructed from A
F(Ex()); //F's parameter uses the default constructor
In the third line I’m passing to F a new (temporary) object of the Ex class using the default constructor. My question is: after this new object is created is it also copy constructed/assigned (like it happens in the second line) or is it directly created “inside” F?
It was hard to find, but honestly it was bugging me. This is called copy constructor elision.
The standard illustrates this example:
And it states:
After this the standard explains return value optimization, which is basically the same thing.
So it actually has nothing to do with observed behavior, it is up to the compiler.