1
为什么GCC不能假设std :: vector :: size在此循环中不会改变?
我要求一个if (i < input.size() - 1) print(0);在此循环中得到优化的同事,这样input.size()就不会在每次迭代中都读取它,但事实证明并非如此! void print(int x) { std::cout << x << std::endl; } void print_list(const std::vector<int>& input) { int i = 0; for (size_t i = 0; i < input.size(); i++) { print(input[i]); if (i < input.size() - 1) print(0); } } 根据带有gcc选项的Compiler Explorer,-O3 -fno-exceptions我们实际上是在读取input.size()每个迭代并lea用于执行减法运算! movq …