gpt4 book ai didi

C++ 按值返回

转载 作者:太空狗 更新时间:2023-10-29 23:53:20 26 4
gpt4 key购买 nike

从下面的代码中,我期望类 CA 将调用以下内容

  1. 构造函数创建由函数 foo 返回的临时对象
  2. 复制构造函数创建要传递给main中的变量a的变量
  3. 另一个复制构造函数,它将根据函数返回的值创建 a 变量。

为什么不是这样呢?我得到的结果只是

A

在我期待的时候

ABB

所以只有构造函数被调用。编译器是在幕后优化某些东西还是我错过了一些 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();
}

最佳答案

Is compiler optimizing something behind the scenes or I missed some C++ concept?

点对点!这称为复制省略。在谷歌上查找 RVO 和 NRVO。您还应该查看三的规则。

复制省略是编译器被允许执行的影响可观察行为的唯一优化。出于这个原因,您不应该将重要的逻辑放在复制构造函数中。

关于C++ 按值返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11485542/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com