Abr*_*ile 2 c++ function copy-constructor
从下面的代码我期望CA类可以调用以下代码
fooamain中变量的变量a根据函数返回的值创建变量.为什么不是这样?我的结果就是
A
Run Code Online (Sandbox Code Playgroud)
虽然我在期待
ABB
Run Code Online (Sandbox Code Playgroud)
所以只调用构造函数.编译器是在幕后优化还是我错过了一些C++概念?
class CA{
public:
CA(){ std::cout << "A"; }
CA( const CA& ){ std::cout << "B"; }
CA& operator=(const CA& ){ std::cout << "C";return *this; }
};
CA foo(){
return CA();
}
int main(){
CA a = foo();
}
Run Code Online (Sandbox Code Playgroud)
编译器是在幕后优化还是我错过了一些C++概念?
发现!它被称为复制省略.在谷歌上查找RVO和NRVO.你也应该查看三个规则.
复制省略是允许编译器执行的唯一影响可观察行为的优化.出于这个原因,您不应该在复制构造函数中放置重要的逻辑.