c++ - 复制构造函数与返回值优化

标签 c++ copy-constructor return-value-optimization

previous question 中, 一个普通的按值返回函数似乎总是将其 return 参数复制到从它分配的变量中。

这是标准要求的,还是可以通过在函数体内构建“分配给”变量来优化函数?

struct C { int i; double d; };

C f( int i, int d ) {
    return C(i,d); // construct _and_ copy-construct?
}

int main() {
    C c = f( 1, 2 ); 
}

最佳答案

标准允许此处任何级别的复制遗漏:

  • 构造一个局部临时变量,将其复制构造为返回值,并将返回值复制构造为局部“c”。
  • 构造一个本地临时变量,并将其复制构造到“c”中。
  • 用参数“i,d”构造“c”

关于c++ - 复制构造函数与返回值优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/665825/

相关文章:

c++ - 什么是复制省略和返回值优化?

c++ - 读取和写入文件 C++

class - 具有成员 std::mutex(或其他不可复制对象)的类的复制或移动构造函数?

c++ - `A a = A()` 有效吗?下面调用了哪些运算符/方法?

c++ - 在 C++ 中,返回变量时会发生什么?

c++ - 返回值优化的魔力是什么?

c++ - 从组合类公开模板参数的替代方法

c++ - 释放内存的重要性?

c++ - 为什么不从临时对象(operator+ 的结果)中移动不调用构造函数?

c++ - 调用时不取赋值运算符的返回类型会怎样?