C ++是否在此处调用了复制构造函数?

时间:2011-03-02 21:02:31

标签: c++ copy-constructor

假设你有这样的功能:

Foo foo() {
  Foo foo;

  // more lines of code

  return foo; // is the copy constructor called here?
}

Foo bar() {
  // more lines of code

  return Foo(); // is the copy constructor called here?
}

int main() {
  Foo a = foo();
  Foo b = bar();  
}

当任何函数返回时,是否调用了复制构造函数(假设会有一个)?

3 个答案:

答案 0 :(得分:10)

可能会被调用,或者可能不会被调用。在两种情况下,编译器都可以选择使用返回值优化(尽管优化在bar中比在foo中更容易。)

即使RVO取消了对复制构造函数的实际调用,仍必须定义复制构造函数并使其可访问。

答案 1 :(得分:8)

取决于是否应用Return Value Optimization

答案 2 :(得分:2)

可以调用。它也可以被优化掉。以同一方向查看一些other question