我正在查看链接列表的迭代器类,并看到此运算符重载并且并不真正理解发生了什么。我的印象是'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;
}
答案 0 :(得分:4)
参数名称始终是可选的。但是,在这种情况下int
是特殊的,因为它表示这是 postfix 运算符,这意味着您可以执行list++
和list--
。
答案 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。