++i
)不会比'后缀'形式(i++
)效率低,并且通常更加高效。”该指南进一步解释了其中的原理,但我并不完全理解。有什么想法吗?也许有人可以提供一个这个概念的例子?++i
)不会比'后缀'形式(i++
)效率低,并且通常更加高效。”该指南进一步解释了其中的原理,但我并不完全理解。有什么想法吗?也许有人可以提供一个这个概念的例子?i++
会使i
的值加一并返回i
的初始值。
int i = 1;
i++; // == 1 but i == 2
但是++i
会返回实际递增的值:
int i = 1;
++i; // == 2 and i == 2 too, so no need for a temporary variable
在第一种情况下,编译器必须创建一个临时变量(在使用时),以返回1
而不是2
(当然,如果它不是常量而是动态值,例如从调用中返回)。摘自:
http://www.parashift.com/c++-faq/increment-pre-post-speed.html
++i有时比i++更快,而且绝不会更慢。
对于诸如int之类的内部类型,这不重要:++i和i++的速度相同。但是对于类类型(例如迭代器)而言,++i很可能比i++更快,因为后者可能会复制此对象。
如果存在i ++的开销,则它可能根本不会产生任何实际差异,除非您的应用程序受到CPU限制。例如,如果您的应用程序大部分时间都在等待某人点击鼠标、进行磁盘I/O、网络I/O或数据库查询,则浪费一些CPU周期不会影响性能。但是,敲击++i与i++一样简单,因此,除非您实际上需要i的旧值,否则为什么不使用前者呢。
因此,如果将i++作为语句而不是作为较大表达式的一部分编写,为什么不直接编写++i呢?你永远不会失去任何东西,有时候你还可以获得一些东西。老一代的C程序员习惯于编写i++而不是++i。例如,他们会说:
for (i = 0; i < 10; i++) ....
由于这里使用的是i++作为语句,而不是作为较大表达式的一部分,因此您可能想使用++i。出于对称性的考虑,即使在不提高速度的情况下,例如对于内在类型和返回void的后缀运算符的类类型,我个人也主张采用这种风格。
i++ - 在使用 i 后增加值 ++i - 立即增加值。
由于 ++i 要求立即增加 i,因此可能会有性能差异。i++ 表示在增加之前可能需要使用 i。该值可能会在增加之前存储在某个地方。
增量(或减量)运算符涉及两个操作:增量和将两个值(旧值或新值)中的一个作为表达式的结果。区别在于要选择哪一个。
如果您采用前缀形式,您首先会增加然后取值,即新值。
如果您采用后缀形式,您将获取旧值,保留它,增加它,将新值放入旧位置并返回旧值。这听起来更复杂 - 而且确实如此。
但是,如果忽略表达式的返回值,则无论您使用内置类型还是对象,都不应该有任何区别。
对于迭代器和其他模板类型,请使用前置递增。
这是因为当您进行后置递增时,您必须:
简单来说,您必须保留该变量的两个副本,并且复制和删除是需要额外时间的原因...