我有这段代码:
class LazyStream {
ostream& output;
std::list<string> pending;
public:
//...
LazyStream operator++(int n = 0){
LazyStream other(output);
if (n>0) output << "<#" << n << ">";
output << pending.pop_front();
return other;
}
我不明白为运算符++获取int值的含义。我虽然只是表明操作符是后缀。操作员如何获得号码? 有人能举个例子吗?
由于
答案 0 :(得分:3)
嗯,这是我第一次见到int
违约。
正如您所指出的,使用“虚拟”int
参数
将post-fix运算符与前缀区分开来。除了那个
这不是一个假人:你写的时候:
myVar ++;
和myVar
有一个用户定义的postfix ++
,即编译器
实际上将其称为:
myVar.operator++( 0 );
没有什么可以阻止你写作:
myVar.operator++( 42 );
(当然,必须这样做,就像在这种情况下,有点失败 运算符重载的目的。)
答案 1 :(得分:2)
如果使用函数调用语法来调用该运算符,显然可以传递该参数。此代码使用gcc完全编译并输出42
:
#include <iostream>
struct Stream {
Stream operator++(int n)
{
std::cout << n;
return *this;
}
};
int main()
{
Stream s;
s.operator++(42);
}
如果我给它默认值,它会给出一个警告(带有-pedantic标志)但它不能有一个警告。这有点意义,因为如果你还定义了前缀增量,那么调用s.operator++()
将是不明确的。但是,我没有在标准中发现明确禁止默认值的任何内容。