我不确定源代码,但我目前的知识是C / C ++函数的局部变量在函数入口处初始化。但我也可以读到,声明变量尽可能接近其使用将有助于编译器优化代码。我对这两个相互矛盾的论点感到困惑。
PS。 我问的是机器如何处理代码而不是人类。
编辑: 为了澄清我的问题,如果函数的所有局部变量都在函数的入口处初始化,那么在函数体中间声明变量除了更好的可读性之外没有其他好处。但是,我还读过声明接近其使用的变量有助于编译器进行优化。我很难理解这两个相互矛盾的论点是如何结合在一起的。任何解释都会有所帮助。
答案 0 :(得分:3)
在C ++中,如果你声明最接近用法,那么如果没有命中该范围,那么变量根本不可能被构造。
class SomeHeavyObjectToConstruct { //...};
版本1:
SomeHeavyObjectToConstruct obj1;
if (some_condition) {
// do something with obj1
} else {
// won't touch obj1
}
第2版:
if (some_condition) {
SomeHeavyObjectToConstruct obj1;
// do something with obj1
} else {
// won't touch obj1
}
通过这种方式,版本2的性能优于版本1
答案 1 :(得分:0)
我没有检查过真实案例,但我对编译器优化的理解告诉我: