什么是复制省略(copy elision)和返回值优化(RVO)在C++中?
大家好!我正在学习C++,遇到了术语“copy elision”和“return value optimization”(RVO)。老实说,我不太明白它们是什么以及为什么需要它们。
我有一个简单的类,在构造函数和析构函数中做一些事情:
```cpp
#include
class MyClass {
public:
MyClass() { std::cout << "Constructor\n"; }
MyClass(const MyClass&) { std::cout << "Copy constructor\n"; }
~MyClass() { std::cout << "Destructor\n"; }
};
MyClass createObject() {
MyClass obj;
return obj; // 这里会发生复制吗?
}
int main() {
MyClass result = createObject();
return 0;
}
```
当我运行这段代码时,我期望看到:“Constructor”,然后是“Copy constructor”(从函数返回时),接着又是“Copy constructor”(赋值给result时),最后是两个析构函数。但实际上我只看到了“Constructor”和“Destructor”。为什么编译器跳过了拷贝构造函数的调用?这就是copy elision吗?