我正在尝试做以下事情:
class FOO {
void bar(int& var = m_var) {
// ....
}
int m_var;
};
为什么不编译?他们为什么不把这个编程成语言呢?有没有办法模仿这种行为?
答案 0 :(得分:6)
这是不允许的,因为m_var
是一个成员变量,需要通过该对象进行访问
如果m_var
是该类的静态成员,则 compile successfully 。
一个简单的解决方法是通过bar()
调用具有相同名称或其他成员函数的重载函数(这是一个成员函数并且可以访问m_var
)并将m_var
作为参考参数。它将具有您想要达到的相同效果。
答案 1 :(得分:4)
我同意,这是语言的限制。它可以毫不费力地实现到编译器中(以我的拙见)。
如果您需要此行为,则必须写:
class FOO
{
void bar(int& var) { ... }
void bar() { this->bar(m_var); }
int m_var;
};
并且额外的函数调用将由任何半合适的编译器内联,以防您担心。
答案 2 :(得分:0)
一种解决方案是使用静态变量作为占位符:
class FOO
{
private:
static int _ph_m_var;
void bar(int& var = _ph_var)
{
if(&var == &_ph_var) { // Default }
}
};
答案 3 :(得分:0)
将m_var声明为静态const。它将编译并运行。
static const int m_var应该做的伎俩