更快地重用在公共范围中定义的变量或在每个内部范围中重新定义它?

时间:2010-10-07 03:55:56

标签: c++ scope redefine

C ++具体来说,如果它很重要,但我认为答案在于汇编代码。

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

实施例:

int i;

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

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

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

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

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

3 个答案:

答案 0 :(得分:4)

如果i是POD类型(例如示例中显示的int),则几乎肯定没有任何区别。

如果某个类型的i具有一个非常重要的构造函数或一个令人兴奋的赋值运算符,那么可能存在巨大差异,您必须比较适当的构造函数和赋值运算符的作用。如果输入了两个块,那么您还需要考虑析构函数。

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

答案 1 :(得分:2)

我猜大多数编译器会为这两种情况和int生成相同的代码,但我个人更喜欢第二种选择,因为i的范围尽可能小。

答案 2 :(得分:1)

如果它不是结构/类,它基本上是相同的(尽管寄存器分配对于块内使用更明显不受约束,这可能有助于优化器,但是任何需要该级别帮助的优化器都应该被放入养老院)。

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