当类具有用户提供的复制构造函数时,是否生成了移动构造函数?

时间:2017-03-07 11:53:22

标签: c++ c++11 c++14 move-semantics move-constructor

C ++标准说(12.8 / 9):

  

如果类X的定义未明确声明移动构造函数,则当且仅当

时,将隐式声明一个默认值。      
      
  • X没有用户声明的复制构造函数,
  •   
  • X没有用户声明的副本分配运算符
  •   
  • X没有用户声明的移动赋值运算符和
  •   
  • X没有用户声明的析构函数。
  •   

但是下面的代码(用clang++ 3.8.0 and g++ 6.3.0编译)给出了一个空输出:

#include <iostream>


struct Foo
{

    Foo() = default;

    Foo(const Foo&)
    {
        std::cout << "Copy constructor" << std::endl;
    }

};


int main()
{
    Foo foo{Foo{}};

    (void)foo;
}

clang ++ g ++ 中是否存在问题?

更新。在评论中注明@Piotr Skotnickicopy elision发生在此处。命令行键-fno-elide-constructors disables it for constructors in clang++ and g++

0 个答案:

没有答案