C++ 重用在公共作用域中定义的变量或在每个内部作用域中重新定义变量的速度更快?

C++ 重用在公共作用域中定义的变量或在每个内部作用域中重新定义变量的速度更快?,c++,scope,redefine,C++,Scope,Redefine,特别是C++语言,如果这很重要的话,但我想答案在某种程度上取决于汇编代码 如果我们在一个公共范围内有多个块,比如一个函数,每个函数都使用同一类型的变量,那么在公共范围内定义变量并在每个块中重新初始化它,或者在每个块中重新定义并初始化它,是不是更快,或者没有根本的区别 例如: 对 我猜大多数编译器为两种情况和一个int生成相同的代码,但我个人更喜欢第二个选项,因为我在尽可能小的范围内。我猜大多数编译器为两种情况和一个int生成相同的代码,但我个人更喜欢第二个选项,因为我在尽可能小的范围内。如

特别是C++语言,如果这很重要的话,但我想答案在某种程度上取决于汇编代码

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

例如:


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

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

如果我是一个类似于示例中显示的int的POD类型,那么几乎可以肯定没有任何区别

如果我属于某种类型,有一个非平凡的构造函数或者一个赋值操作符,可以做一些令人兴奋的事情,那么可能会有很大的不同,你需要比较合适的构造函数和赋值操作符的功能。如果两个块都被输入,那么你也需要考虑析构函数。

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

如果我是一个POD类型,如示例中所示的int,那么几乎肯定没有任何区别

如果我属于某种类型,有一个非平凡的构造函数或者一个赋值操作符,可以做一些令人兴奋的事情,那么可能会有很大的不同,你需要比较合适的构造函数和赋值操作符的功能。如果两个块都被输入,那么你也需要考虑析构函数。


一般来说,你不应该为此担心。采用更简洁的方法,在尽可能有限的范围内声明变量,尽可能接近其首次使用,只有当探查器告诉您这是一个性能问题点时,才重构它。

如果它不是一个结构/类,则基本上是相同的,尽管寄存器分配对于块内使用更明显地不受限制,这可能有助于优化者,但任何需要这种程度帮助的乐观主义者都应该被送到养老院


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

如果它不是结构/类,则基本上是相同的,尽管寄存器分配对于块内使用更为明显,这可能有助于优化程序,但任何需要这种程度帮助的乐观主义者都应该被送到养老院


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

在这种情况下,我会偏向于良好的编程实践,而不是试图弥补微小的优化,除非优化结果在特定情况下不是那么小。在这种情况下,我会偏向于良好的编程实践,而不是试图弥补微小的优化,除非优化结果在特定情况下不是那么小。这取决于输入的块,是的。如果输入了两个块,那么如果将变量声明为尽可能局部的,则会得到额外的对象销毁。如果没有输入块,显然你不会得到破坏和创造!这取决于输入的是哪个块。如果输入了两个块,那么如果将变量声明为尽可能局部的,则会得到额外的对象销毁。如果没有输入块,显然你不会得到破坏和创造!
int i;

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

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

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