小编Bor*_*rja的帖子

成员初始化列表错误的统一初始化

我在这个C++ 11代码上遇到编译错误,但我不知道为什么.这是代码:

#include <condition_variable>

class NonCopiableClass
{
    std::condition_variable condition_;
};

struct NonCopiableStruct
{
    std::condition_variable condition_;
};

class Test
{
 public:
    Test() : 
        myClass{},
        myStruct{}
    {};
 private:
    NonCopiableClass myClass;
    NonCopiableStruct myStruct;
};
Run Code Online (Sandbox Code Playgroud)

Visual Studio 2015失败,出现以下错误:

错误C2280:'std :: condition_variable :: condition_variable(const std :: condition_variable&)':尝试引用已删除的函数1> c:\ program files(x86)\ microsoft visual studio 14.0\vc\include\mutex(550 ):注意:请参阅'std :: condition_variable :: condition_variable'的声明.

如果我更改Test constructor为不使用C++ 11统一初始化Struct它编译好了.

Test() : 
        myClass{},
        myStruct() // <--- CHANGE
    {};
Run Code Online (Sandbox Code Playgroud)

我没有得到为什么Struct类型使用复制构造函数,但Class似乎没问题.只有Struct拥有不可复制的成员才会发生这种情况.

我还注意到,如果我初始化成员初始化列表的Struct外部Test …

c++ struct class c++11 visual-c++-2015

11
推荐指数
1
解决办法
476
查看次数

标签 统计

c++ ×1

c++11 ×1

class ×1

struct ×1

visual-c++-2015 ×1