为什么C ++程序员更喜欢前缀++而Java程序员更喜欢后缀++?

时间:2019-12-20 01:38:41

标签: java c++ for-loop

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

import java.util.Comparator; public class sortByNum extends Sort implements Comparator<Student> { @Override public int compare(Student o1, Student o2) { //Help plz } }; }

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

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

我看不出语法差异的原因。我读过++ i可能会更快一些,这证明它可以在c ++中使用,但是为什么我们要在Java中使用i ++?另外,为什么我们不将其称为++ c?

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

2 个答案:

答案 0 :(得分:1)

实际上,如果类型是整数,则在大多数常见平台上不存在的差异可以忽略不计。当类型是某种自定义对象(例如迭代器)时,可以有所作为的地方。考虑:

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导出了它,或者它的实现很简单)

答案 1 :(得分:0)

postfix表单是在早期C编程书籍中引入的,并且使用很多。此后,前缀形式开始流行,并在Java编程书籍中引入。因此,基本上,这取决于您何时开始编程生涯。

使用现代的优化编译器,没有实际区别(至少对于C / C ++)。

如果您想显得更高级,请使用后缀形式=)