gpt4 book ai didi

c++ - for 循环中条件表达式的计算

转载 作者:太空狗 更新时间:2023-10-29 20:34:46 26 4
gpt4 key购买 nike

我有一个问题:

假设我有以下代码:

代码A:

for (int i = 0; i < n + 1; i++)
{
// something here
}

代码 B:

int lim = n + 1;
for (int i = 0; i < lim; i++)
{
// something here
}

哪个代码会更有效率?代码 A 中的条件表达式是在 for 循环的每次迭代中计算,还是现代编译器会处理它并自行为其分配一个常量值?

最佳答案

这取决于很多因素。如果编译器可以证明 n 的值在循环期间不会改变,则这种优化是合法的。例如,如果 n 是全局或动态范围内的变量,并且在循环中间有一个函数调用,编译器通常不能假设调用的任何函数都不会修改全局或动态范围的变量。否则循环的两个版本显然不会相同。

或者,即使变量在本地或自动范围内,并且附近某处有一个指针,也可能会或可能不会通过指针修改它,因此这种优化也不安全。

只有在编译器能够证明优化后没有可观察到的变化时,才允许编译器进行与优化相关的代码更改。最后,如果编译器可以证明优化不会产生任何可观察到的变化,那么编译器是否会实现这一点可能取决于编译选项。

关于c++ - for 循环中条件表达式的计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46325738/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com