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();
...
}
答案 0 :(得分:4)
如果i
是POD类型(例如示例中显示的int
),则几乎肯定没有任何区别。
如果某个类型的i
具有一个非常重要的构造函数或一个令人兴奋的赋值运算符,那么可能存在巨大差异,您必须比较适当的构造函数和赋值运算符的作用。如果输入了两个块,那么您还需要考虑析构函数。
一般来说,你不应该担心它。采用更干净的方法并尽可能在最受限制的范围内声明变量,尽可能接近其首次使用,并且只有在您的分析器告诉您它是性能问题点时才重构它。
答案 1 :(得分:2)
我猜大多数编译器会为这两种情况和int
生成相同的代码,但我个人更喜欢第二种选择,因为i
的范围尽可能小。
答案 2 :(得分:1)
如果它不是结构/类,它基本上是相同的(尽管寄存器分配对于块内使用更明显不受约束,这可能有助于优化器,但是任何需要该级别帮助的优化器都应该被放入养老院)。
对于类,它取决于构造函数/析构函数和operator =()的相对性能。因此,没有一个正确的答案。尽管如此,在更局部化的范围内创建变量通常是更好的编程实践,而这种关注通常会占主导地位。