c – 为什么以下代码也会调用复制构造函数?
作者:互联网
为什么当g_Fun()执行返回temp时它会调用复制构造函数?
class CExample
{
private:
int a;
public:
CExample(int b)
{
a = b;
}
CExample(const CExample& C)
{
a = C.a;
cout<<"copy"<<endl;
}
void Show ()
{
cout<<a<<endl;
}
};
CExample g_Fun()
{
CExample temp(0);
return temp;
}
int main()
{
g_Fun();
return 0;
}
解决方法:
因为您按值返回,但请注意,由于RVO,因此不需要调用复制构造函数.
根据优化级别,可能会也可能不会调用复制程序 – 不要依赖它们.
标签:nrvo,copy-elision,c,move-semantics,copy-constructor 来源: https://codeday.me/bug/20190729/1569329.html