【问题标题】:Advantage of declaring a variable multiple times inside different loops在不同循环内多次声明变量的优点
【发布时间】:2019-12-10 10:23:12
【问题描述】:

我知道在 c++ 中,变量的范围越小越好。 我有一些变量在不同的循环中使用,但它们的使用在不同的循环之间没有连接。 我应该在循环中多次声明这些变量(使它们在循环中成为局部变量)还是只在函数的开头声明一次? 这两种方法的优缺点是什么(如果有的话)?

【问题讨论】:

  • “我知道在 c++ 中,变量的范围越小越好” ...“我应该在尽可能小的范围内声明变量吗”(释义) ... 嗯是的
  • 范围越小越好。

标签: c++ scope declaration


【解决方案1】:

对于原始数据类型,除了可读性之外并没有真正的好处。 对于其他需要昂贵的内存初始化的东西,例如类或指针,它可能很重要。

例如:

int* a = new int[arrSize]; ///Calling outside loop
for(int i = 0; i < 1000; i++) {
    //use 'a' to do something
    for(int j = 0; j < arrSize; j++) {
        a[j] = j;
    }
    foo(a, arrSize);
    //use 'a' for some other completely unrelated task
    for((int j = 0; j < arrSize / 2; j++) {
        a[j] = j * 2;
    }
    bar(a, arrSize / 2);
}
delete[] a; ///Calling outside loop

然后像这样调用new int[arrSize]delete[] a 1000 次更有意义:

for(int i = 0; i < 1000; i++) {
    int* a = new int[arrSize]; ///Calling inside loop
    //use 'a' to do something
    for(int j = 0; j < arrSize; j++) {
        a[j] = j + i;
    }
    foo(a, arrSize);
    //use 'a' for some other completely unrelated task
    for((int j = 0; j < arrSize / 2; j++) {
        a[j] = j * 2 + i;
    }
    bar(a, arrSize / 2);
    delete[] a; ///Calling inside loop
}

【讨论】:

  • 很好的细微差别。对于内置类型,它没有意义,并且可能最好以最小范围声明,但对于构​​造函数重对象,出于性能原因,可以选择重用它们。顺便说一句,使用 std::vector 比 new / delete 数组更容易维护,尽管它执行了额外的初始化。
猜你喜欢
  • 2017-02-24
  • 1970-01-01
  • 2012-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-15
  • 1970-01-01
相关资源
最近更新 更多