如果没有定义Move语义(Move构造函数和Move赋值操作符),编译器是否默认优化
If Move semantics(Move constructor and Move assignment operator) are not defined does compiler optimize by default?
在定义类时,如果我们忘记写Move构造函数和Move赋值操作符,编译器会自动优化和添加。
也许是,也许不是。这不是编译器是否足够聪明的问题,而是您还记得或忘记定义了哪些其他特殊的成员函数。编译器隐式定义move构造函数的确切条件列在§12.8/9 [class.copy]
类似地,隐式生成move赋值运算符的条件列在§12.8/20如果类
X
的定义没有显式声明move构造函数,则当且仅当X
没有用户声明的复制构造函数X
没有用户声明的拷贝赋值操作符X
没有用户声明的move赋值操作符,
-X
没有用户声明的析构函数
如果类
X
的定义没有显式声明move赋值操作符,当且仅当X
没有用户声明的复制构造函数X
没有用户声明的move构造函数X
没有用户声明的拷贝赋值操作符,
-X
没有用户声明的析构函数
相关文章:
- C/C++编译器通常会删除重复的库吗
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- Win32编译器选项和内存分配
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++,我收到一个无法理解的编译器错误
- 在线编译器中的分段C++没有打印消息
- 瓦尔格林德:数学函数"Conditional jump or move depends on uninitialised value(s)"
- 使用仅使用一次的变量调用的复制构造函数.这可能是通过调用move构造函数进行编译器优化的情况吗
- 编译器是否足够聪明,以至于 std::move 变量超出范围?
- 编译器发射std :: move()运行时调用
- 为什么编译器在调用 move 后选择复制 ctor
- 为什么 std::move 未定义,尽管编译器使用 -std=c++11 调用
- 优化编译器可以添加std::move吗
- std::move of string literal - 哪个编译器是正确的
- 如果没有定义Move语义(Move构造函数和Move赋值操作符),编译器是否默认优化
- 为什么当定义析构函数时,编译器不再添加默认的move函数和赋值函数
- c++编译器如何决定何时为std::vector或任何对象调用move构造函数?
- Will编译器会在setter方法中自动应用move语义
- 编译器是否可以自动生成std::move用于最后一次使用左值