为什么要在C ++中避免使用postfix运算符?

时间:2013-05-22 15:36:11

标签: c++ operators postfix-operator prefix-operator

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

当我们能够选择其中任何一个时,为什么更喜欢prefix operator ++到postfix operator ++?

5 个答案:

答案 0 :(得分:5)

前缀运算符++执行单个操作 - 增加值。

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

前缀版本在概念上更简单,并且始终(至多奇怪的运算符重载)至少与后缀版本一样有效。

答案 1 :(得分:3)

我很确定你的教授正在谈论前缀和后缀 ++ 运算符之间的旧速度差异。我也很确定它不再重要,因为现代编译器通常足够聪明,可以识别它是否可以优化。

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

答案 2 :(得分:2)

前缀运算符可能比后缀运算符更快,具体取决于它运行的类型。它应该永远不会慢。

对于大多数内在类型,速度应该相同。但是,许多自定义迭代器需要制作一些状态对象的额外副本才能正确实现后缀运算符。

答案 3 :(得分:0)

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

对于前缀运算符,您将获得新对象,从而节省了复制开销。

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

我总是希望看到++n

事实上,我宁愿将这种语言称为++ C;不是C ++!

答案 4 :(得分:-1)

除了风格问题,没有真正的理由。一位指出 专家推荐了一次,大家一味地跟着, 虽然我所做的措施表明它没有 差。

如果您正在开始绿色字段项目,我将使用前缀, 但动机只是为了避免愚蠢的讨论 问题。如果我正在处理现有代码,我将继续使用 无论什么是最常见的,因为在实际代码中,它是 尽管声称相反,但绝对没有区别。