加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 是否尽可能维持“常数”是一个好主意?

发布时间:2020-12-16 03:04:39 所属栏目:百科 来源:网络整理
导读:最近,我一直在开发一个在我的代码中做许多事情的做法:const: (1)功能的论据,我知道永远不会改变.例如.: void foo (const int i,const string s) ^^^^^ ^^^^^ (2)返回类型为const.例如.: struct A {... const int foo () { return ...; } ^^^^^ operator
最近,我一直在开发一个在我的代码中做许多事情的做法:const:

(1)功能的论据,我知道永远不会改变.例如.:

void foo (const int i,const string s)
          ^^^^^        ^^^^^

(2)返回类型为const.例如.:

struct A {
...
  const int foo () { return ...; }
  ^^^^^
  operator const bool () const { return ...; }
           ^^^^^
};

(3)整数或字符串的简单计算.例如.:

const uint size = vec.size();
^^^^^
const string s2 = s1 + "hello ";
^^^^^

…还有更多的地方.通常在其他现实世界的代码中,我看不到这样的小型变量标记为const.但是我认为,使他们永远不会伤害.这是一个很好的编程实践吗?

解决方法

(1)和(3)密切相关.一个by-value参数只是一个具有该名称的局部变量,同样是您的计算结果.

通常,无论您是否将局部变量const标记为局部变量,短函数都不会有什么区别,因为您可以在整个范围内看到它们的全部范围.您可以看到值是否改变,您不需要或希望编译器强制执行.

然而,它有助于帮助,因为它可以保护您免于意外地将它们传递给使用非const引用的参数,而不会意识到您正在修改变量.因此,如果在生命周期中将变量作为函数参数传递,那么将其标记为const可以让您更有信心,知道它之后有什么价值.

偶尔,标记一个变量const可以帮助优化器,因为你告诉它,对象永远不会被修改,有时这是真的,但编译器不能以其他方式证明它.但是,由于这个原因,这可能不值得,因为在大多数情况下,这并没有什么区别.

(2)是另一回事.对于内置类型,没有什么区别,正如其他人所说明的那样.对于类类型,不要返回const值.这似乎是一个好主意,因为它阻止用户写一些无意义的东西,如func_returning_a_string()=“extra text”;但它也阻止了一些有意义的东西–C11移动语义.如果foo返回一个const字符串,并且我写std :: string s =“foo”; if(condition)s = foo();那么在s = foo();.如果foo返回一个非const字符串,那么我得到移动赋值.

类似地,在没有移动语义的C 03中,它防止了称为“swaptimization”的技巧 – 使用非const返回值,我可以写入foo().swap(s);而不是s = foo();.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读