当前位置:  开发笔记 > 编程语言 > 正文

常数,但仅适用于此范围的其余部分

如何解决《常数,但仅适用于此范围的其余部分》经验,为你挑选了1个好方法。

我有时会遇到变量有意义的情况const,但仅限于其范围的后半部分.例如,块的第一部分可能设置值,如果很明显我们已经"完成"设置该变量,则其余部分的可读性可能会提高 -

void foo() {
  int n;
  // Do things that result in initialization of n

  freeze n;  // Imaginary construct that declares "n" const for rest of scope

  // Later steps that depend on 'n' but do not change it
}

有没有捕获这种模式的C++习语?当然,块的后半部分可以移动到一个单独的功能,但是可以在不移动任何东西的情况下完成吗?



1> M.M..:

您的"冻结"代码可能如下所示:

const int &refN = n;

然后你用refN而不是n.你可以切换周围的名字.

有更复杂的解决方案,但你真的要问自己,增益是否值得痛苦.如果您的功能非常复杂,以至于您无法一眼就看出是否已修改,n那么您需要重构代码.


例如,隐藏n你可以这样做:

{
const int &_tmp = n;
const int &n = _tmp;

// rest of code

}

但你必须问自己是否值得.谁会在你想知道你在吸烟之后阅读这些代码.


另一种选择是你的功能:

const int n = setup_n();

在哪里将逻辑卸载到另一个函数或lambda:

const int n = [](){
   // ...logic...
   return finalized_value;
}();

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有