i = i + 1 和 ++i 之间的速度比较
Speed comparison between i = i + 1 and ++i
对于 C++11,i = i + 1
是否比 ++i
快? I hear 对于 类,++i
比 i++
快,但对于简单类型则不然。 i = i + 1
和这两个有类似的比较吗?
谢谢!
编辑 1:我使用 g++,但我很高兴知道它在其他编译器上的工作原理。
编辑 2:这个问题与 this one 不同,因为它专门询问 i = i + 1
,而不是仅仅谈论 ++i
和 i++
.
之间的区别
编辑 3:(TonyD - 由 QuantumFool 语法编辑)问题的 i = i + 1
方面与 this
重复
除了你使用的编译器,还取决于你使用的优化设置。想知道就反汇编看具体编译器+优化设置的编译结果。
然而至少有一些事情大部分是正确的:
i++
不会比i = i+1
慢
++i
不会比 i++
慢,如果你只做递增的话。
- 如果可能,即使对于简单类型,也总是首选写
++i
。不是因为性能,而是为了建立一个良好的实践,这样你在对一个对象做 ++
时就不需要三思而后行了。
- 如果类型不是class,像int之类的,都差不多
- 如果类型是class,++i比i++快,因为++ireturns左值,i++returns右值;
class A{
private:
int i;
public:
A( int k =0): i(k){}
A operator++(){ // i++
A temp=*this; // need create a new object
i++;
return temp;
}
A & operator++(int){ // ++i
i++;
return *this;
}
};
对于 C++11,i = i + 1
是否比 ++i
快? I hear 对于 类,++i
比 i++
快,但对于简单类型则不然。 i = i + 1
和这两个有类似的比较吗?
谢谢!
编辑 1:我使用 g++,但我很高兴知道它在其他编译器上的工作原理。
编辑 2:这个问题与 this one 不同,因为它专门询问 i = i + 1
,而不是仅仅谈论 ++i
和 i++
.
编辑 3:(TonyD - 由 QuantumFool 语法编辑)问题的 i = i + 1
方面与 this
除了你使用的编译器,还取决于你使用的优化设置。想知道就反汇编看具体编译器+优化设置的编译结果。
然而至少有一些事情大部分是正确的:
i++
不会比i = i+1
慢
++i
不会比i++
慢,如果你只做递增的话。- 如果可能,即使对于简单类型,也总是首选写
++i
。不是因为性能,而是为了建立一个良好的实践,这样你在对一个对象做++
时就不需要三思而后行了。
- 如果类型不是class,像int之类的,都差不多
- 如果类型是class,++i比i++快,因为++ireturns左值,i++returns右值;
class A{
private:
int i;
public:
A( int k =0): i(k){}
A operator++(){ // i++
A temp=*this; // need create a new object
i++;
return temp;
}
A & operator++(int){ // ++i
i++;
return *this;
}
};