我很清楚在C++中
int someValue = i++;
array[i++] = otherValue;
Run Code Online (Sandbox Code Playgroud)
与...相比有不同的效果
int someValue = ++i;
array[++i] = otherValue;
Run Code Online (Sandbox Code Playgroud)
但每隔一段时间我就会在for循环中看到带有前缀增量的语句,或者仅仅是它们自己的语句:
for( int i = 0; i < count; ++i ) {
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
要么
for( int i = 0; i < count; ) {
//do some stuff;
if( condition ) {
++i;
} else {
i += 4;
}
}
Run Code Online (Sandbox Code Playgroud)
在后两种情况下,++i看起来像是试图生成看起来很聪明的代码.我在监督什么吗?是否有理由使用++i而不是i++后两种情况?
Kon*_*lph 44
在自己的代码中查看两个运算符的可能实现:
// Pre-increment
T*& operator ++() {
// Perform increment operation.
return *this;
}
// Post-increment
T operator ++(int) {
T copy = *this;
++*this;
return copy;
}
Run Code Online (Sandbox Code Playgroud)
后缀运算符调用前缀运算符来执行自己的操作:通过设计原则上前缀版本将始终比后缀版本更快,尽管编译器可以在许多情况下(尤其是对于内置类型)优化它.
因此,对前缀运算符的偏好是自然的; 另一个需要解释的是:为什么有这么多人在无关紧要的情况下使用前缀运算符引起了兴趣 - 但是没有人对使用后缀运算符感到惊讶.
jal*_*alf 32
如果我们忽略习惯的力量,'++ i'在概念上是一个更简单的操作:它只是在i的值上加一,然后使用它.
i++另一方面,是"取原值i,将其存储为临时,添加一个i,然后返回临时".它要求我们即使在i更新后仍保持旧的价值.
正如Konrad Rudolph所示,使用i++用户定义类型可能会产生性能成本.
所以问题是,为什么不总是默认为++i?
如果你没有理由使用`i ++',为什么呢?为什么你会默认执行更复杂的操作,并且可能执行速度较慢?
| 归档时间: |
|
| 查看次数: |
6475 次 |
| 最近记录: |