取消引用字符串迭代器会对性能产生很大影响吗?
我有一个运行多次的循环(C ++)
for (string::const_iterator it = myString.begin; it != myString.end(); it++) {
do lots of things on *it;
}
因为我不知道(并且无法找到)如何为string :: const_iterator实现*运算符我想知道是否使用char a = *它会比*更好它
答案 0 :(得分:0)
除非您使用的是库的调试版本,否则字符串迭代器应该只是一个指针,并且取消引用它应该只是取消引用指针。
指针很可能被包装在类类型中(虽然这不是必需的;指针本身会生成一个有效的迭代器);但这不会增加任何开销。
与指针一样,您可以通过保存其目标的本地副本而受益,因为它可以放在寄存器中;但是如果编译器可以看到内存中的值不会改变,那么编译器可能会进行优化。确定哪个更好的唯一方法是尝试两种变体,并测量它和/或研究生成的组件。
答案 1 :(得分:0)
对于字符串,迭代器(通常)只是在释放模式下解析为指针(与向量迭代器相同)。任何有价值的编译器都会缓存这种干扰,因此性能命中理论上应该是不存在的。但经验法则是:当有疑问时,衡量。
是allin发布模式。