【问题标题】:Why using the const keyword before and after method or function name?为什么在方法或函数名之前和之后使用 const 关键字?
【发布时间】:2013-05-03 05:27:22
【问题描述】:

我的应用程序中有以下代码。为什么我们在返回类型和方法名之后使用const关键字?

const T& data() const { return data_; }

【问题讨论】:

标签: c++


【解决方案1】:
const T& get_data() const { return data_; }
^^^^^

意味着它将返回一个constT的引用(这里是data_

Class c;
T& t = c.get_data()             // Not allowed.
const T& tc = c.get_data()      // OK.


const T& get_data() const { return data_; }
                    ^^^^^

表示该方法不会修改类的任何成员变量(除非成员是mutable)。

void Class::get_data() const {
   this->data_ = ...;  // is not allowed here since get_data() is const (unless 'data_' is mutable)
   this->anything = ... // Not allowed unless the thing is 'mutable'
}

【讨论】:

  • 除非它们被定义为mutable ;)
  • @mwerschy 正确。已编辑。
  • 在函数名之前的 const 的情况下寻找更多解释......函数如何将常量引用返回给 T?这是否意味着函数每次都返回相同的值? (例如:静态变量的地址)
  • 抱歉这么晚的评论,但是用const 声明的函数成员可以通过const_cast 指针的this 修改类的所有成员(甚至非mutable 成员)。
【解决方案2】:

const(和volatile)限定符绑定到左侧。这意味着任何时候你看到const,它都会被应用到它左边的令牌上。但是,有一个例外;如果const 的左侧没有任何内容,则它将绑定到右侧。记住这些规则很重要。

在您的示例中,第一个 const 左侧没有任何内容,因此它绑定到右侧,即 T。这意味着返回类型是对const T 的引用。

第二个 const 在它的左边确实有一些东西;函数data()。这意味着const 将绑定到函数,使其成为const 函数。

最后,我们有一个 const 函数返回对 const T 的引用

【讨论】:

    【解决方案3】:

    第一个const 表示该函数正在返回一个const T 引用。

    第二个说方法没有改变对象的状态。 IE。该方法不会改变任何成员变量。

    【讨论】:

      【解决方案4】:
      const T& data() const { return data_; }
      

      成员函数后面的const表示数据是一个常量成员函数,在这个成员函数中没有数据成员被修改。

      const 返回类型表示返回一个常量 ref 给 T

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多