如果我使用int
索引来访问向量元素,它会将整数转换为size_t
,然后调用operator[](size_t)
函数吗?是否有任何性能降低?
答案 0 :(得分:5)
int
和size_t
之间的主要区别在于int
已签名,而size_t
未签名。此外,两者可能具有不同的大小,因为这两种类型都是特定于平台的并且彼此独立。
如果两种尺寸相同,则从int
到size_t
的转换为无操作,因此不存在性能影响。
当大小不同时,编译器足够智能,可以将int
索引的部分或扩展值传递到operator []
,而size_t
几乎没有任何开销,因为缩小大小需要部分负载,同时扩大尺寸需要为上部加载零。但请注意,为扩展值的上半部分写入零不是附加操作,因为它替换从size_t
类型的索引复制上部。
因此,答案是否定的,你不会看到任何性能差异。
答案 1 :(得分:0)
取决于 - size_t
取决于平台。