【问题标题】:const best practice in function declaration函数声明中的 const 最佳实践
【发布时间】:2011-11-11 10:42:54
【问题描述】:

我搜索了存档的帖子,但找不到类似的内容。

只是一个简单的问题:声明检查功能的最佳做法是:

int foo(int a) const { return a+1; }

我指的是 const 关键字,你通常在检查函数的末尾声明它吗?我只是问,因为我通常会这样做,即使 99% 我不会声明任何 const 类。我只是不断告诉自己,如果我需要的话,它可以为我节省一些时间,但我想知道是否还有其他人真的关心声明 const 函数,或者我只是对类型安全代码偏执

【问题讨论】:

  • 什么叫inspecting函数?
  • 啊..只是一种调用不改变任何对象成员的方法的方法
  • 该函数不访问任何成员,因此应该改为static
  • static 和 const 方法其实不太一样,另外,我说的是一个不改变任何成员,不访问的函数
  • 但是您提供了一个方法示例,该方法除了参数之外不访问任何内容,因此它应该是static。我并不是说所有const 方法都应该是static,我只是说你的示例中的方法应该是。

标签: c++


【解决方案1】:

假设你在谈论成员函数(非成员函数永远不能是const),你应该总是写const-correct代码,这意味着每个函数都没有修改对象的可见状态应该是const

即使您从未创建过该类型的常量对象,在许多情况下,您也会通过 const 引用将对象传递给函数,在这种情况下,只能在对象上调用 const 成员函数 (顺便说一句,这意味着您应该通过对不需要更改接收对象状态的任何函数的常量引用来传递对象)

【讨论】:

    【解决方案2】:

    附加在函数声明和定义末尾的const 表示函数调用者和函数之间的约定,该函数不会修改该类的任何成员。

    因此,如果您的函数为此类 const 正确性合约提供保证,您应该将其扩展到您的函数的用户。

    【讨论】:

    • 谢谢,但这不是关于 const 关键字的含义/用法的问题,我只是想知道是否有人关心声明 const 函数
    • @user815129:每个优秀的 C++ 程序员都会这样做。
    【解决方案3】:

    是的,如果您希望您的程序支持 const 正确性,您当然应该这样做。

    一旦您开始将实例声明为const,常量正确性就会在您的程序中传播。随着程序复杂性和您对const 的使用增加,您将:

    • 如果现在不添加 const 对象,则会遇到许多编译器错误
    • 或者一旦您喜欢在适当的地方使用const,您的程序将不会出现(或更少)错误。
    • 或者您最终可能会在一段时间内避开const - 如果您想改进您的设计,这 (IMO) 不是一条好路。

    随着时间的推移,我们中的许多人已经学会在超过 1% 的代码中使用 const

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多