【发布时间】:2016-03-08 02:53:54
【问题描述】:
如果我使用int索引访问一个向量元素,它会将整数转换为size_t,然后调用operator[](size_t)函数吗?有没有性能下降?
【问题讨论】:
-
个人资料并亲自查看:)
-
您可以测量并找出答案。
-
是什么让你想到了性能下降?
-
您可以自己比较generated code。当然它会转换它,
v[0]使用int显然可以。 -
在编译器允许
int为负数的情况下,在 x86_64 上选择int与size_t会产生显着的本地性能成本(因为符号扩展是相对昂贵)。显着的局部性能差异可能是也可能不是可检测的全局性能差异。编译器何时检测到特定的int不能为负数?根据我的经验(查看生成的代码),有时会比人类显而易见的时候少。