1

特别是 C++,如果它很重要,但我想答案在于汇编代码。

如果我们在公共范围内有多个块(例如,一个函数),每个块都使用相同类型的变量,那么在公共范围内定义变量并在每个块中重新初始化它会更快,还是在每个块中重新定义和初始化它?块(或者没有根本区别)?

例子:

int i;

{//block 1
    i = SomeFunction();
    ...
}

{//block 2
    i = SomeOtherFunction();
    ...
}

相对

{//block 1
    int i = SomeFunction();
    ...
}

{//block 2
    int i = SomeOtherFunction();
    ...
}

4

3 回答 3

4

如果i是 POD 类型(如int您的示例中所示),几乎可以肯定根本没有区别。

如果i是某种类型,它有一个非平凡的构造函数或一个赋值运算符做一些令人兴奋的事情,那么可能会有很大的不同,你必须比较适当的构造函数和赋值运算符的作用。如果输入了两个块,那么您还需要考虑析构函数。

一般来说,你不应该担心它。采用更简洁的方法,并在最受限制的范围内声明变量,尽可能接近它的第一次使用,并且只有在你的分析器告诉你这是一个性能问题点时才重构它。

于 2010-10-07T03:59:54.150 回答
2

我猜大多数编译器都会为 case 和 an 生成相同的代码int,但我个人更喜欢第二种选择,因为i它处于尽可能小的范围内。

于 2010-10-07T03:59:42.433 回答
1

如果它不是结构/类,则基本相同(尽管寄存器分配对于块内使用更明显不受限制,这可能有助于优化器,但任何需要这种帮助水平的优化器都应该放入疗养院) .

对于类,它取决于构造函数/析构函数和 operator=() 的相对性能。因此,没有单一的正确答案。尽管如此,在更本地化的范围内创建变量通常是更好的编程实践,并且这种关注通常会占主导地位。

于 2010-10-07T04:01:32.790 回答