当我们在这些函数中有未命名的参数时到底发生了什么?

时间:2014-11-27 17:44:01

标签: c++ parameters

我正在查看链接列表的迭代器类,并看到此运算符重载并且并不真正理解发生了什么。我的印象是'int'总是必须用变量名声明?

   void operator++(int)
    {
            assert(m_node != NULL);
            m_node = m_node->m_next;
    }

    void operator--(int)
    {
            assert(m_node != NULL);
            m_node = m_node->m_prev;
    }

4 个答案:

答案 0 :(得分:4)

参数名称始终是可选的。但是,在这种情况下int是特殊的,因为它表示这是 postfix 运算符,这意味着您可以执行list++list--

参考:http://en.cppreference.com/w/cpp/language/operators

答案 1 :(得分:4)

如果需要,您可以随时省略参数名称。如果在正常的函数定义中执行此操作,则意味着仍必须向函数提供参数,但该函数不使用它:

void f(int) // unnamed parameter
{
    // can't use the parameter without a name
}

f();   // ERROR: wants an int
f(42); // OK: takes an int (but ignores it)

对于递增和递减运算符,未使用的int参数是神奇的,表示这是后缀运算符x++,而不是前缀运算符++x,没有参数。

答案 2 :(得分:2)

因为你有两个++运算符,所以它是一种特殊的语法,可以在后增量和预增量之间区分它们。

void operator++(int)

表示后期创作

void operator++()

表示预生成

所以在你的情况下,你首先返回,然后再增加。

答案 3 :(得分:1)

void operator ++(int)

这意味着后增量运算符。 int只是一个虚拟变量,可以将它与预增量运算符区分开来。当调用post increment operator时,编译器会在其位置传递0。