【发布时间】:2011-10-26 08:03:05
【问题描述】:
目前,我正在向一班 C++ 程序员教授 C# 语言的基础知识。在我们讨论主题运算符时,我使用了 C# 标准类别的主要运算符、一元运算符等。
其中一位与会者感到困惑,因为在 C# 标准中,“后缀 ++/--”已被置于主要运算符的类别中,而不是“前缀 ++/--”。她造成这种混淆的理由是,她宁愿根据运算符“前缀 ++/--”来实现 C++ 运算符“后缀 ++/--”。换句话说,她宁愿将运算符“前缀++/--”算作主要运算符。 - 我明白她的意思,但我不能给她一个背后的理由。好吧,运算符“后缀 ++/--”的优先级高于“前缀 ++/--”,但这是唯一的理由吗?
规范在“14.2.1 运算符优先级和关联性”一节中提到了它。
所以我非常中性的问题是:为什么后缀 ++/-- 在 C# 中被归类为主要运算符? 有没有更深层次的道理?
【问题讨论】:
-
即使是 C# 规范也没有在任何地方提到“主运算符”的类别......
-
到目前为止,我还没有听说过“主要”和“次要”运算符之间的区别。您能否简单解释一下,或指出更多信息?
-
@BoltClock 和 stakx:参见 ECMA 论文中的“14.2.1 运算符优先级和关联性”。
-
在 C# 中的运算符重载中,++ 运算符只返回值“x+1”[即要分配给变量的值,并用于表达式中前缀运算符的值]。其余语义由调用站点的编译器实现(通过引用或值类型分配)。这与 C++ 有很大不同,这与赋值运算符不能重载的原因相同。
-
我认为这是一个武断的决定。如果要明确定义
x+++y,其中一个必须比另一个具有更高的优先级。我认为乔恩的回答解决了问题中间令人困惑的部分,您在其中指的是 implementing 一个在另一个方面(这不能在 C# 中完成,只有一个运算符重载可用) .
标签: c# operators postfix-operator prefix-operator