什么是复制消除和返回值优化?
复制消除是大多数编译器实现的一种优化,用于在某些情况下防止额外的(潜在的昂贵)复制。因此,如果您有一些创建对象不会被使用或没有副作用的代码,
例子
struct MyStruct {
MyStruct() {}
MyStruct(const MyStruct&) {
std::cout << "Copied.\n";
}
};
MyStruct f() {
return MyStruct();
}
int main() {
std::cout << "Main\n";
MyStruct obj = f();
}输出
您可以根据编译器和设置获得以下任何输出−
Main Main Copied Copied Main Copied
这意味着创建的对象少于您的预期,因此您也不能依赖于调用某个特定数量的构造函数和析构函数。您不应该在复制/移动构造函数或析构函数中使用关键逻辑,因为您不能依赖于它们被调用。
广告
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
安卓
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP