我有疑問,在下面的代碼段。函數fun1
和fun2
都是相同的。在一個我聲明瞭一個局部變量,而在另一個變量是由參數傳遞。那麼爲什麼在fun1的情況下複製構造函數不會被調用。局部變量和變量傳遞作爲參數
#include<stdio.h>
#include<iostream>
using namespace std;
class A
{
public:
A()
{
printf("constructor\n");
}
A(const A&)
{
printf("copy cons\n");
}
~A()
{
printf("destructor\n");
}
};
A fun1()
{
A obj;
return obj;
}
A fun2(A obj)
{
return obj;
}
int main()
{
A a=fun1();
printf("after fun1\n");
A b;
A c = fun2(b);
}
輸出
constructor
after fun1
constructor
copy cons
copy cons
destructor
destructor
destructor
destructor
其方式C++的設計!的 –
可能重複[什麼是複製省略和返回值優化?(http://stackoverflow.com/questions/12953127/what-are-copy-elision-and-return-value-optimization) –