取消引用字符串迭代器和性能影响

时间:2014-03-14 17:28:22

标签: c++ string iterator dereference

取消引用字符串迭代器会对性能产生很大影响吗?

我有一个运行多次的循环(C ++)

for (string::const_iterator it = myString.begin; it != myString.end(); it++) {
    do lots of things on *it;
}

因为我不知道(并且无法找到)如何为string :: const_iterator实现*运算符我想知道是否使用char a = *它会比*更好它

2 个答案:

答案 0 :(得分:0)

除非您使用的是库的调试版本,否则字符串迭代器应该只是一个指针,并且取消引用它应该只是取消引用指针。

指针很可能被包装在类类型中(虽然这不是必需的;指针本身会生成一个有效的迭代器);但这不会增加任何开销。

与指针一样,您可以通过保存其目标的本地副本而受益,因为它可以放在寄存器中;但是如果编译器可以看到内存中的值不会改变,那么编译器可能会进行优化。确定哪个更好的唯一方法是尝试两种变体,并测量它和/或研究生成的组件。

答案 1 :(得分:0)

对于字符串,迭代器(通常)只是在释放模式下解析为指针(与向量迭代器相同)。任何有价值的编译器都会缓存这种干扰,因此性能命中理论上应该是不存在的。但经验法则是:当有疑问时,衡量。

是allin发布模式。