在C++中最小化变量作用域

4

我现在已经编程有一段时间了,开始试图改善我的代码。由于我真的很讨厌在长函数中创建许多仅使用一次的变量,所以通过使用括号缩短变量作用域是否是良好的实践方法呢?例如,不是这样写:

void fcn()
{
  int var1;
  // some part of fcn
  // use of var1;
  // rest of fcn
}

写作:

void fcn()
{
  // some part of fcn
  {
    int var1;
    // use of var100;
  }
  // rest of fcn
}

3
如果函数中有太多变量,你需要将函数拆分 - 这样每个函数都会得到新的作用域。(话虽如此,这种拆分在特定情况下也用于锁等操作。) - Mat
是的,我宁愿将那段逻辑拆分成一个单独的函数。这样更易于阅读,同时具有最小的作用域。 - Nguyen Ngoc Tuan
不要像Pascal程序员一样在函数顶部声明变量。尽可能靠近使用位置进行声明。如果你只使用一个变量一次,那么你真的需要它吗? - molbdnilo
3个回答

9

保持变量的作用域尽可能小确实是个好主意。

在您的情况下,除非您绝对确定使用var1的代码将仅在fcn中使用(如果我的经验有任何参考价值,我往往会误判),否则您可以将该代码拆分到单独的函数中。这样您的程序将更易扩展,并且测试也会更简单。否则,请像当前一样使用作用域块。


6

在某些情况下,这种方法是一个很好的实践。

在“if/range for/while/case”语句中使用显式初始化已经在C++17和C++20中广泛应用。


1
@Bathsheba,我也支持你的回答。 - Oliv

0

您不应该在任何地方编写 int var1;

首先,var1 是个糟糕的变量名。

其次,如果任何代码路径可以在赋值之前读取 var1,则现在可能存在未定义的行为。

更好的选择是:

int meaningfulName = initialValue;

或者更好的是

const int meaningfulName = value;

做到这一点后,您要选择的范围更加受限。如果仍有选择余地,请尽可能选择最窄的范围。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接