小编ory*_*unn的帖子

当parens初始化时,为什么构造函数初始化列表中的C++ 11大括号初始化不起作用?

初始化对抽象类型的引用时,构造函数初始化列表中的{}初始化如何与()初始化不同?以下课程栏:

class AbstractBase
{
public:
    AbstractBase() {}
    virtual ~AbstractBase() = default;

    virtual void ab() = 0;
};

class Foo : public AbstractBase
{
public:
    Foo() {}

    void ab() {}
};

class Bar
{
public:
    Bar(const AbstractBase& base) : myBase{base} {}

private:
    const AbstractBase& myBase;
};


int main()
{
    Foo f{};
    Bar b{f};

}
Run Code Online (Sandbox Code Playgroud)

编译时,我收到错误

test5.cpp: In constructor ‘Bar::Bar(const AbstractBase&)’:
test5.cpp:22:48: error: cannot allocate an object of abstract type ‘AbstractBase’
     Bar(const AbstractBase& base) : myBase{base}
                                                ^
test5.cpp:2:7: note:   because the following …
Run Code Online (Sandbox Code Playgroud)

c++ initialization reference c++11 list-initialization

12
推荐指数
1
解决办法
1366
查看次数