为什么要避免C++中的后缀运算符

Why to avoid postfix operator in C++?

本文关键字:后缀 运算符 C++ 为什么      更新时间:2023-10-16

我听到一位教授说"避免使用上下文允许选择前缀的后缀运算符">。我搜索了一下,但没有在stackoverflow中找到解释这一点的相关帖子。

当我们有能力选择prefix运算符++时,为什么更喜欢postfix运算符++

前缀运算符++执行一个操作——增加值。

后缀运算符++执行三个操作——保存当前值、增加值和返回旧值。

前缀版本在概念上更简单,并且总是(直到奇怪的运算符重载(至少与后缀版本一样高效。

我很确定你的教授说的是前缀和后缀之间的旧速度差++运算符。我也很确定,选择哪一个不再重要,因为现代编译器通常足够聪明,能够识别出它是否可以优化。

此外,根据您的代码,您可能需要使用其中一个或另一个来确保正确性。

前缀运算符可能比后缀运算符快,具体取决于其操作的类型。它不应该再慢了。

对于大多数内在类型,速度应该相同。然而,许多自定义迭代器需要对某些状态对象进行额外的复制,以便正确地实现后缀运算符。

为了实现后缀运算符,必须获取原始对象的副本,因为这就是返回给您的内容。

对于前缀操作符,您可以取回新对象,从而节省复制开销。

有些人(正确地(会告诉你,编译器会优化掉无意的后缀副本;例如在类似for (int n = 0; n < large; n++) 的代码中

我总是喜欢看++n

事实上,我宁愿把这种语言叫做++C;不是C++!

除了风格问题之外,没有什么真正的原因。一位注意到专家推荐过一次,大家都盲目地跟着做,尽管我所采取的措施表明差别

如果你开始一个绿地项目,我会使用前缀,但动机只是为了避免关于问题如果我正在处理现有的代码,我将继续使用最常见的是什么,因为在实际代码中绝对没有区别,尽管有相反的说法。