为什么Postfix ++/ - 在C#中被归类为主要操作符?

Nic*_*ico 14 c# operators prefix-operator postfix-operator

目前我正在教授一类C++程序员C#语言的基础知识.在我们讨论主题运算符时,我使用了C#标准类别的primary,unary等运算符.

其中一位与会者感到困惑,因为在C#标准中,"postfix ++/ - "已被归入主要运营商的类别,而不是"前缀++/ - ".她的这种混乱背后的理由是,她宁愿实现C++运算符"后缀++/- " 来讲运营商"前缀++/- ".换句话说,她宁愿将运算符"prefix ++/ - "视为主要运算符. - 我理解她的观点,但我不能给她一个理由.好吧,运营商"postfix ++/ - "的优先级高于"前缀++/ - ",但这背后的唯一理由是什么?

该规范在"14.2.1运算符优先级和关联性"一节中提到了它.

所以我非常中立的问题:为什么Postfix ++/ - 在C#中被归类为主要操作符?它有更深层次的真相吗?

Yuv*_*val 2

由于 ECMA 标准本身没有定义什么是“主”运算符,除了优先顺序(即在“一元”之前)之外,没有其他意义。用词可能很糟糕。

考虑到在许多 C 链接语言中,后缀运算符倾向于创建一个临时变量,用于存储表达式的中间结果(请参阅分号处的“优先使用前缀运算符而不是后缀”)。因此,它们与前缀版本有根本的不同。

尽管如此,快速检查 Mono 和 Visual Studio 如何使用后缀和前缀形式编译 for 循环,我发现生成的 IL 代码是相同的。仅当您使用后缀/前缀表达式的值时,它才会转换为不同的 IL(仅影响“dup”指令的放置位置),至少对于提到的那些实现而言是如此。