C++这里调用的是拷贝构造函数吗?

标签 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();  
}

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

最佳答案

它可能会被调用,也可能不会被调用。在这两种情况下,编译器都可以选择使用返回值优化(尽管 bar 中的优化比 foo 中的优化要容易一些)。

即使 RVO 消除了对复制构造函数的实际调用,复制构造函数仍然必须被定义和访问。

关于C++这里调用的是拷贝构造函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5173432/

相关文章:

c++ - LInux/c++,如何同时保护两个数据结构?

c++ - 使用 Armadillo 类型的 lambda 函数崩溃的未知原因

c++ - Eclipse:缺少 C++ 运行配置?

c++ - 将整数转换为 Little Endian 十六进制字符串

c++ - 抽象类中的复制控件

c++ - 为什么交换(这个技巧)会缩小 vector 的容量?

C++ 按值返回

C++ - 为什么可以在复制构造函数中直接访问传递的对象的私有(private)变量?

c++ - 二叉树的深度复制构造函数

C++ 复制构造函数基类指针