C++ 最小化变量';s范围在C++;

C++ 最小化变量';s范围在C++;,c++,variables,scope,C++,Variables,Scope,我现在正在编程一段时间,我已经开始尝试改进我的代码。因为我真的很讨厌创建大量在长函数中只使用一次的变量,所以使用括号来缩短变量范围是一种好的做法吗? 即 而是写: 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; }

我现在正在编程一段时间,我已经开始尝试改进我的代码。因为我真的很讨厌创建大量在长函数中只使用一次的变量,所以使用括号来缩短变量范围是一种好的做法吗? 即 而是写:

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
}

是的,保持变量的范围尽可能紧凑确实是一个好主意


在您的情况下,除非您绝对确定使用
var1
的代码只会在
fcn
中使用(如果我的经验值得借鉴,我倾向于错误判断),否则您可以将该代码拆分为单独的函数。这样您的程序可以更好地扩展,测试也会更简单。否则,请像您当前所做的那样使用范围块。

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


它在“if/range for/while/case”语句中分布得如此广泛,以至于在C++17和C++20中添加了这些语句中的显式初始值设定项任何地方

首先,
var1
是个可怕的名字

其次,如果任何代码路径在分配之前都可以读取
var1
,那么现在就有可能出现未定义的行为

偏爱

int meaningfulName = initialValue;
甚至更好

const int meaningfulName = value;

这样做之后,您所选择的范围将受到更大的限制。如果仍然有选择,请选择尽可能窄的范围。

如果函数中的变量数量接近数百万,则需要将该函数拆分,每个函数都会有新的范围。(也就是说,这是为锁之类的东西做的。)是的,我宁愿将这段逻辑分割成一个单独的函数。读起来更清晰,同时有最小的作用域。不要像你是Pascal程序员一样在函数顶部声明变量。声明尽可能接近使用。如果你只使用一次变量,你真的需要它吗?@Bathsheba tx,我也支持你的答案。