在C ++中推荐的++或+1是什么?

时间:2017-01-17 09:29:59

标签: c# c++ c++11 visual-c++

S++S=S+1,可以建议将值递增1,为什么?

我认为S++应该是首选,因为它是内部的单机指令(INC)。如果我错了,请让我纠正。其他方式我认为两者都是相同的,除了++是一元的,它的后增量和运算符重载是不同的。

C#会有什么不同吗?

5 个答案:

答案 0 :(得分:15)

你永远不应该尝试做这么小的优化。对于几乎所有情况,现代编译器足够聪明,可以为所有3个选项(++ii+=1i=i+1生成相同的汇编代码。

是的,有时您可以获得一些微小的性能提升,例如,对于某些具有非常复杂的++运算符的类,使用前缀++而不是postfix,但在绝大多数情况下,您的程序部分是花费大部分时间不是增量,所以为了获得一些真实的结果,你应该在真实(或接近真实)测试中分析你的代码,找到效率较低的常用代码片段。

此外,还有一个更重要的事情需要考虑 - 它的代码可读性。在绝大多数情况下,它比性能更重要,只有在时间最关键的代码中,我们才能牺牲性能的可读性(甚至在那里,并非总是如此!有时候最好只添加更多硬件)。

所以,我的建议是使用以最清晰的方式陈述您的想法的选项

答案 1 :(得分:4)

回到过去,这种事情有所不同。我曾经查看生成的机器代码,然后调整C源代码以获得额外10%的速度提升。

不再了。您无法通过查看机器代码来预测速度。

  • 这些天的许多优化都是在CPU中完成的。
  • IL代码在运行时再次针对其运行的处理器进行优化,因此作为开发人员,您永远不会看到执行的指令。
  • CPU非常快,几乎不重要。

您可以尝试测试不同的递增方式,看哪一种更快。一旦你对此感到厌倦,就不要再担心速度而要专注于编写清晰,无错误的代码。

答案 2 :(得分:3)

C ++同时有pre and post-increment operators 已经回答here,预增量运算符通常更快 (主要是因为编译器可以更好地优化它,并且它不需要返回旧值的临时副本)。

答案 3 :(得分:1)

在通过执行s = s + 1 OR s ++递增变量s之间,我们首先需要接受操作本身是非常基本,简单和直接的。我们基本上将存储在变量中的值递增固定数。即使s ++比s = s + 1更快地执行,这两种不同方法之间的时差也是相同的。 我尝试了以下代码:

    int s = 1;
    s++;

它提供了以下编译和执行时间:

  

编译时间:0.32秒,绝对运行时间:0.14秒,CPU时间:0秒,内存峰值:3 Mb,绝对服务时间:0,46秒

之后,我尝试了以下代码:

    int s = 1;
    s = s + 1;

它给出了以下执行时间:

  

编译时间:0.32秒,绝对运行时间:0.14秒,CPU时间:0秒,内存峰值:3 Mb,绝对服务时间:0,46秒

所以,就像我说的那样,两个操作之间没有显着差异,因为它们本身非常简单。存在时差;但是,上面给出的执行时间并不是那么具体,这意味着必须有一个> 0.001的时间差,这几乎可以忽略不计。希望这能回答你的问题。

答案 4 :(得分:0)

++更强大。 你可以做那样的事情

if(a++ > 7) b=0;