C++ 若并没有定义移动语义(移动构造函数和移动赋值运算符),编译器默认会优化吗?

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

在定义类时,若我们忘记编写移动构造函数和移动赋值运算符,编译器是否足够聪明,可以自动进行优化和添加。

可能,可能不会。问题不在于编译器是否足够聪明,而在于您还记得或忘记了定义哪些特殊的成员函数。在§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
没有用户声明的析构函数。


也许,也许不是。问题不在于编译器是否足够聪明,而在于您还记得或忘记了定义哪些特殊的成员函数。在§12.8/9[类副本]中列出了编译器隐式定义移动构造函数的确切条件

如果类
X
的定义没有显式声明移动构造函数,则当且仅当
-
X
没有用户声明的复制构造函数,
-
X
没有用户声明的复制分配运算符,
-
X
没有用户声明的移动分配运算符,并且
-
X
没有用户声明的析构函数。

类似地,隐含生成移动分配运算符的条件列在§12.8/20中

如果类
X
的定义没有显式声明移动赋值运算符,则当且仅当
-
X
没有用户声明的复制构造函数,
-
X
没有用户声明的移动构造函数,
-
X
没有用户声明的复制分配运算符,并且
-
X
没有用户声明的析构函数。