我一直在阅读有关C ++中++ i和i ++的微优化的一些帖子/问题。从我所学到的是,我可以“不能”,但可以比i ++更快。
所以这让我问这个问题,那么i ++的意义呢?我认为++ i是你首先增加值然后返回它。在i ++中,您返回值然后递增它。但我对此做了一个非常简单的测试:
for(int i = 0; i < 10; ++i)
{
std::cout << i << std::endl;
}
与:
相同for(int i = 0; i < 10; i++)
{
std::cout << i << std::endl;
}
两者都打印出相同的结果。所以我真正的问题是,你是否必须使用i ++而不是++ i?如果有,请解释。感谢
答案 0 :(得分:2)
以下是一个例子:
int i = 0;
while (i++ < 10) {
std::cout << i << std::endl;
}
这会将数字1
打印到10
。如果您使用++i
,则会将1
打印到9
。
当然,这是一个简单的例子,因为还有其他方法可以做到这一点,但重点是i++
将返回旧值。进一步澄清:
int i = 5;
std::cout << i++ << std::endl; // 5
std::cout << i << std::endl; // 6
std::cout << ++i << std::endl; // 7
std::cout << i << std::endl; // 7
在for
循环中,没有区别,因为执行增量并且然后检查条件。两者之间的唯一区别是实际表达式的值。
答案 1 :(得分:1)
如果您希望在递增之前获取i++
i
,请使用for(int i = 0; i < 10; i++)
{
std::cout << "old i = " << i++ << std::endl;
std::cout << "new i = " << i << std::endl;
}
,例如:
++i
如果要打印已增加的i
,请使用{{1}}。
答案 2 :(得分:0)
有时您想先使用该值然后再增加,例如
while (array[i++] != sentinel)
答案 3 :(得分:0)
在必须使用后缀或前缀版本时,应该没有可行的正常情况。每个版本都可以产生相同的功能效果。
前缀运算符可以更快,但编译器无论如何都会执行优化,并且会比手动尝试更好。
主要区别在于代码的可读性和简单性 - 请参阅其他答案中的示例 - 有些情况下,前缀/后缀比其他版本更方便。
所有这些都与C和C ++相关。由于C ++允许您重载运算符,因此可以为每个运算符提供不同的功能,在这种情况下,上述声明不成立。但应注意,编写此类代码可能是一个非常糟糕的主意。