在C ++中的函数声明中引用成员变量?

时间:2011-07-28 16:31:35

标签: c++

我正在尝试做以下事情:

class FOO {
 void bar(int& var = m_var) {
   // ....
 }
 int m_var;
};

为什么不编译?他们为什么不把这个编程成语言呢?有没有办法模仿这种行为?

4 个答案:

答案 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应该做的伎俩