【发布时间】:2020-08-08 16:40:48
【问题描述】:
#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;
}
从上面的代码中,我重载了 postfix increment 和 postfix unary minus。我知道 postfix unary minus 没有意义,但我想知道为什么我对 x- 有编译错误,而 x-- 没有任何问题 和 x.operator-(0) 操作。
我在 DevC++ 中编译了这段代码,但出现以下错误。
[Error] expected primary-expression before ';' token
x- 有什么问题?
【问题讨论】:
-
x- 不存在。你在哪里使用这个运算符?只有一元减号。
-
@Sanjeev:他的意思是编译器让他声明一个作为后缀一元减号运算符的函数,他甚至可以调用它,但他不能使用运算符语法。
-
解析独立于重载决议。
x-;失败,因为语言语法不允许。 -
您可以定义函数,因为您可以使用
x.operator-()语法调用它。 -
这不是“一元后缀
-运算符”,而是“二进制中缀-运算符”。
标签: c++ operator-overloading unary-operator postfix-operator