C++ 若并没有定义移动语义(移动构造函数和移动赋值运算符),编译器默认会优化吗?
在定义类时,若我们忘记编写移动构造函数和移动赋值运算符,编译器是否足够聪明,可以自动进行优化和添加。可能,可能不会。问题不在于编译器是否足够聪明,而在于您还记得或忘记了定义哪些特殊的成员函数。在§12.8/9[类副本]中列出了编译器隐式定义移动构造函数的确切条件 如果类C++ 若并没有定义移动语义(移动构造函数和移动赋值运算符),编译器默认会优化吗?,c++,c++11,compiler-construction,compiler-optimization,move-semantics,C++,C++11,Compiler Construction,Compiler Optimization,Move Semantics,在定义类时,若我们忘记编写移动构造函数和移动赋值运算符,编译器是否足够聪明,可以自动进行优化和添加。可能,可能不会。问题不在于编译器是否足够聪明,而在于您还记得或忘记了定义哪些特殊的成员函数。在§12.8/9[类副本]中列出了编译器隐式定义移动构造函数的确切条件 如果类X的定义没有显式声明移动构造函数,则当且仅当 -X没有用户声明的复制构造函数, -X没有用户声明的复制分配运算符, -X没有用户声明的移动分配运算符,并且 -X没有用户声明的析构函数。 类似地,隐含生成移动分配运算符的条件列在§1
X
的定义没有显式声明移动构造函数,则当且仅当-
X
没有用户声明的复制构造函数,-
X
没有用户声明的复制分配运算符,-
X
没有用户声明的移动分配运算符,并且-
X
没有用户声明的析构函数。类似地,隐含生成移动分配运算符的条件列在§12.8/20中 如果类
X
的定义没有显式声明移动赋值运算符,则当且仅当-
X
没有用户声明的复制构造函数,-
X
没有用户声明的移动构造函数,-
X
没有用户声明的复制分配运算符,并且-
X
没有用户声明的析构函数。也许,也许不是。问题不在于编译器是否足够聪明,而在于您还记得或忘记了定义哪些特殊的成员函数。在§12.8/9[类副本]中列出了编译器隐式定义移动构造函数的确切条件 如果类
X
的定义没有显式声明移动构造函数,则当且仅当-
X
没有用户声明的复制构造函数,-
X
没有用户声明的复制分配运算符,-
X
没有用户声明的移动分配运算符,并且-
X
没有用户声明的析构函数。类似地,隐含生成移动分配运算符的条件列在§12.8/20中 如果类
X
的定义没有显式声明移动赋值运算符,则当且仅当-
X
没有用户声明的复制构造函数,-
X
没有用户声明的移动构造函数,-
X
没有用户声明的复制分配运算符,并且-
X
没有用户声明的析构函数。也许,也许不是。问题不在于编译器是否足够聪明,而在于您还记得或忘记了定义哪些特殊的成员函数。在§12.8/9[类副本]中列出了编译器隐式定义移动构造函数的确切条件 如果类
X
的定义没有显式声明移动构造函数,则当且仅当-
X
没有用户声明的复制构造函数,-
X
没有用户声明的复制分配运算符,-
X
没有用户声明的移动分配运算符,并且-
X
没有用户声明的析构函数。类似地,隐含生成移动分配运算符的条件列在§12.8/20中 如果类
X
的定义没有显式声明移动赋值运算符,则当且仅当-
X
没有用户声明的复制构造函数,-
X
没有用户声明的移动构造函数,-
X
没有用户声明的复制分配运算符,并且-
X
没有用户声明的析构函数。也许,也许不是。问题不在于编译器是否足够聪明,而在于您还记得或忘记了定义哪些特殊的成员函数。在§12.8/9[类副本]中列出了编译器隐式定义移动构造函数的确切条件 如果类
X
的定义没有显式声明移动构造函数,则当且仅当-
X
没有用户声明的复制构造函数,-
X
没有用户声明的复制分配运算符,-
X
没有用户声明的移动分配运算符,并且-
X
没有用户声明的析构函数。类似地,隐含生成移动分配运算符的条件列在§12.8/20中 如果类
X
的定义没有显式声明移动赋值运算符,则当且仅当-
X
没有用户声明的复制构造函数,-
X
没有用户声明的移动构造函数,-
X
没有用户声明的复制分配运算符,并且-
X
没有用户声明的析构函数。