假设你有这样一个函数:
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/