【问题标题】:Minimalizing variable's scope in C++在 C++ 中最小化变量的范围
【发布时间】:2020-01-03 12:13:47
【问题描述】:

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

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
}

【问题讨论】:

  • 如果你在一个函数中的任何地方都接近无数个变量,你需要拆分这个函数——你会为每个函数获得全新的作用域。 (也就是说,特别是针对锁之类的事情。)
  • 是的,我宁愿将那段逻辑拆分成一个单独的函数。阅读起来更清晰,同时范围也很小。
  • 不要像 Pascal 程序员一样在函数顶部声明变量。声明尽可能接近使用。如果你只使用一次变量,你真的需要它吗?

标签: c++ variables scope


【解决方案1】:

是的,保持变量的范围尽可能小确实是个好主意。

在您的情况下,除非您绝对确定您使用 var1 的代码只会在 fcn 中使用(如果我的经验有任何依据,我往往会误判),您可以将其拆分代码输出到一个单独的函数。你的程序会以这种方式更好地扩展,并且测试也会更简单。否则,请像现在一样使用范围块。

【讨论】:

    【解决方案2】:

    在某些情况下这种方法是一种很好的做法。

    它在 'if/range for/while/case' 语句中分布广泛,以至于在 C++17 和 C++20 中添加了这些语句中的显式初始化程序。

    【讨论】:

    • @Bathsheba tx,我也支持你的回答。
    【解决方案3】:

    你不应该写int var1;任何地方

    首先var1 是一个可怕的名字。

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

    喜欢

    int meaningfulName = initialValue;
    

    甚至更好

    const int meaningfulName = value;
    

    这样做后,您选择的范围就会受到更多限制。如果还有选择,请尽量选择最窄的范围。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-19
      • 2021-11-14
      • 2011-12-23
      • 2017-10-30
      • 2020-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多