后缀运算符不应该被认为是二元运算符吗
Shouldn't the Postfix Operators be Considered Binary Operators
后缀运算符采用 int
参数。已经有 question as to why, and it seems like the answer is: "Because Bjarne Stroustrup said so"
我对这个答案感到不舒服。如果 Bjarne Stroustrup 需要一些东西来提示编译器以不同的方式运行,他为什么不能直接关闭运算符是否返回引用?这让我质疑:
- 为什么我做不到:
foo++ 13;
- 为什么
int
参数不默认为 1
- 为什么这被认为是一元运算符,它需要一个参数
If Bjarne Stroustrup needed something to tip the compiler off to behave differently, why couldn't he just key off whether the operator returned a reference?
因为您不能根据 return 类型重载函数。就是函数可以重载的参数,const限定和引用限定
Why can't I do: foo++ 13;
因为 (int)
参数只是用于重载解析。你不带进去也不用参数。
Why isn't the int
parameter defaulted to 1
再次没有使用。它只是告诉编译器它是前缀版本还是后缀版本。
Why is this considered a unary operator at all, it takes an argument
它实际上不需要争论。该参数仅用于使它们不同。它只影响和作用于一个操作数,因此它是一元运算符。
回答标题中的问题:在foo++
中,++
显然是一元运算符。事实上,如果您斜视它,它的实现可能看起来像一个二元运算符,这并没有改变它的使用方式,这就是它成为一元运算符的原因。
后缀运算符采用 int
参数。已经有 question as to why, and it seems like the answer is: "Because Bjarne Stroustrup said so"
我对这个答案感到不舒服。如果 Bjarne Stroustrup 需要一些东西来提示编译器以不同的方式运行,他为什么不能直接关闭运算符是否返回引用?这让我质疑:
- 为什么我做不到:
foo++ 13;
- 为什么
int
参数不默认为 1 - 为什么这被认为是一元运算符,它需要一个参数
If Bjarne Stroustrup needed something to tip the compiler off to behave differently, why couldn't he just key off whether the operator returned a reference?
因为您不能根据 return 类型重载函数。就是函数可以重载的参数,const限定和引用限定
Why can't I do:
foo++ 13;
因为 (int)
参数只是用于重载解析。你不带进去也不用参数。
Why isn't the
int
parameter defaulted to 1
再次没有使用。它只是告诉编译器它是前缀版本还是后缀版本。
Why is this considered a unary operator at all, it takes an argument
它实际上不需要争论。该参数仅用于使它们不同。它只影响和作用于一个操作数,因此它是一元运算符。
回答标题中的问题:在foo++
中,++
显然是一元运算符。事实上,如果您斜视它,它的实现可能看起来像一个二元运算符,这并没有改变它的使用方式,这就是它成为一元运算符的原因。