【发布时间】:2017-04-18 03:22:14
【问题描述】:
我希望通过索引遍历一个向量,然后我有:
for(size_t i=0;i<v.size();++i)
{...}
我知道使用迭代器访问更有效,但我只是想在编译器优化的技术点上讨论。
我的问题是这个“v.size()”是只执行一次还是多次?
或者,编译器将帮助我决定是否需要通过任何优化策略计算大小是否足够一次,或者是否需要多次调用——这样我就不必:
size_t s=v.size()
for(size_t i=0;i<s;++i)
让代码更有效率?
【问题讨论】:
-
没有任何保证。该标准不要求编译器这样做,也不禁止它这样做。所以它完全取决于你的编译器。您必须通过检查反汇编来验证它。或者只是相信它会做正确的事。
-
我的经验是它每次都运行。
-
一般来说,如果你想看看优化器会做什么,去godbolt并输入你的代码。
标签: c++ loops for-loop optimization