我有一个类,其构造函数看起来像
class foo
{
public:
foo(Base const& b);
private:
derived c;
Base const& b_;
};
我希望c成为构造函数的默认值,如
foo(Base const& b = c):b_(b)
但是我收到一条错误说: 非静态成员引用必须相对于特定对象
如何为b设置特定派生类的默认值?
答案 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_;
};