【发布时间】:2014-08-06 17:55:30
【问题描述】:
在定义类时,如果我们忘记编写移动构造函数和移动赋值运算符,编译器是否足够聪明,可以自动优化和添加。
【问题讨论】:
标签: c++ c++11 compiler-construction compiler-optimization move-semantics
在定义类时,如果我们忘记编写移动构造函数和移动赋值运算符,编译器是否足够聪明,可以自动优化和添加。
【问题讨论】:
标签: c++ c++11 compiler-construction compiler-optimization move-semantics
也许,也许不是。这不是编译器是否足够聪明的问题,而是您记住或忘记定义的其他特殊成员函数的问题。 §12.8/9 [class.copy]
下列出了编译器将隐式定义移动构造函数的确切条件如果类
X的定义没有显式声明移动构造函数,当且仅当
—X没有用户声明的复制构造函数,
—X没有用户声明的复制赋值运算符,
—X没有用户声明的移动赋值运算符,并且
—X没有用户声明的析构函数。
类似地,在§12.8/20
中列出了隐式生成移动赋值运算符的条件如果
X类的定义没有明确声明移动赋值运算符,当且仅当
—X没有用户声明的复制构造函数,
—X没有用户声明的移动构造函数,
—X没有用户声明的复制赋值运算符,并且
—X没有用户声明的析构函数。
【讨论】: