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

标签 c++ operator-overloading unary-operator postfix-operator

#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-- x.operator-(0) 操作。
我在 DevC++ 中编译了这段代码,但出现以下错误。
[Error] expected primary-expression before ';' token
出了什么问题x- ?

最佳答案

What is wrong with x- ?


没有错;这是由语言设计的。你会看到同样的错误
1 - ;
意思是,operator -期待一个参数像你在下一行所做的那样工作
x.operator-(0);

关于c++ - C++ 编译器是否将所有后缀运算符重载视为相同(- 和 -- 的后缀版本)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63317859/

相关文章:

kotlin - 如何在 Kotlin 中使用运算符重载将数字除以数字向量

java - 请解释为什么这段代码会导致无限循环

c++ - "hello world"string literal 可以赋给char * 类型吗?

C++无符号无限循环比较错误

c++ - 如何访问 USB 电视调谐卡等 BDA 设备

c++ - 运算符重载时局部变量发出警告,按照教程,不知道该怎么办

c++ - 多态智能指针的使用

c# - 泛型的泛型结构 : can I create overloads for specific kinds(? 中的运算符重载)?

r - R中S4类的一元加

c++ - C++ 中的一元运算符重载特例