C++编译器是否将所有后缀运算符重载都视为相同(-和-的后缀版本)


#include <cstdio>
#include <iostream>
using namespace std;
class Int32 {
int num;
public:
Int32(int num = 0) : num(num) {}
~Int32() {}
int value() { return num; }
Int32 & operator - (int x) { cout << "Postfix of -" << endl; return *this; }
Int32 & operator -- (int x) { cout << "Postfix of --" << endl; return *this; }
};
int main() {
Int32 x(100);
x--;
x-;  // [Error] expected primary-expression before ';' token
x.operator-(0);
return 0;
}

从上面的代码中,我重载了后缀增量一元后缀减号。我知道后缀一元减号没有意义,但我想知道为什么我在x-上有编译错误,并且在x-.operator-(0(操作上没有任何问题。

我在DevC++中编译了这段代码,并得到了以下错误。

[Error] expected primary-expression before ';' token

x-有什么问题?

x-有什么问题?

没有什么问题;这是通过语言设计。也会出现同样的错误

1 - ;

也就是说,operator -期望一个参数能像你在下一行中那样工作

x.operator-(0);

最新更新