首页 > 解决方案 > 为什么 c++ 程序员更喜欢前缀 ++ 而 java 程序员更喜欢后缀 ++?

问题描述

在我看到的代码中,普通样式的 java for 循环如下所示:

for(int i = 0; i < n; i++){\\do stuff}

在 c++ 中,等价的示例将编写如下:

for(int i = 0; i < n; ++i){\\do stuff}

我看不出语法差异的原因。我读过 ++i 可能会稍微快一些,这证明了它在 c++ 中的使用是合理的,但是为什么我们在 java 中使用 i++ 呢?另外,我们为什么不叫它++c?

澄清:我感兴趣的是为什么两种语言之间的语法差异发展不同,而不是两种编写 for 循环的方式之间的差异是什么。据我所知,这可能不是出于实际原因,而是出于历史原因,我想知道这些原因是什么。

标签: javac++for-loop

解决方案


实际上,如果类型是整数,则差异可以忽略不计,在最常见的平台上不存在。当类型是某种类型的自定义对象(例如迭代器)时,它可以产生影响。考虑:

class iter
{
  int* ptr; //< lazy
public:
  iter& operator ++ () //< prefix
  {
    ++ptr;
    return *this;
  }
  iter operator ++ (int) //< postfix
  {
    iter it(*this); //< temp copy
    ++ptr;
    return it;
  }
};

在这种情况下,后缀运算符需要复制,而前缀则不需要。在最常见的情况下,编译器会看穿您正在做什么(修复前或修复后),并将代码优化为完全相同。如今唯一真正的问题是编译器是否无法看穿您的迭代器(例如,您没有内联迭代器类,而是将其导出为 DLL,或者它具有非平凡的实现)


推荐阅读