【问题标题】:If Move semantics(Move constructor and Move assignment operator) are not defined does compiler optimize by default? [duplicate]如果未定义移动语义(移动构造函数和移动赋值运算符),编译器是否默认优化? [复制]
【发布时间】:2014-08-06 17:55:30
【问题描述】:

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

【问题讨论】:

    标签: c++ c++11 compiler-construction compiler-optimization move-semantics


    【解决方案1】:

    也许,也许不是。这不是编译器是否足够聪明的问题,而是您记住或忘记定义的其他特殊成员函数的问题。 §12.8/9 [class.copy]

    下列出了编译器将隐式定义移动构造函数的确切条件

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

    类似地,在§12.8/20

    中列出了隐式生成移动赋值运算符的条件

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

    【讨论】:

      猜你喜欢
      • 2015-11-20
      • 2016-05-19
      • 2013-03-16
      • 2019-09-29
      • 2017-05-15
      • 2016-09-13
      • 2013-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多