构造函数中抽象类的默认值

时间:2015-10-12 17:21:01

标签: c++ abstract-class

我有一个类,其构造函数看起来像

class foo
{
public:
foo(Base const& b);
private:
derived c;
Base const& b_;
};

我希望c成为构造函数的默认值,如

foo(Base const& b = c):b_(b)

但是我收到一条错误说: 非静态成员引用必须相对于特定对象

如何为b设置特定派生类的默认值?

1 个答案:

答案 0 :(得分:2)

这是禁止的。来自n3337:

  

§8.3.6/ 9同样,非静态成员不得在默认情况下使用   参数,即使它没有被评估,除非它看起来像   类成员访问表达式(5.2.5)的 id-expression ,或者除非它用于形成指向成员的指针(5.3.1)。

换句话说,为了实现这一点,c必须是static,因为访问静态数据成员不需要任何对象。

class foo
{
public:
foo(Base const& b = c);
private:
static derived c;
Base const& b_;
};