I have expected to have 2 copy constructor calls, one for return by value and one for pass argument by value. But it does not call copy constructor even a single time:
#include<iostream>
using namespace std;
class MyClass
{
public:
MyClass(){}
MyClass (const MyClass &)
{
cout << "copy" <<endl;
}
};
MyClass f()
{
return MyClass();
}
void g(MyClass i)
{
i;
}
int main()
{
f();
g(MyClass());
return 0;
}
Why?