为什么在方法或函数名之前和之后使用const关键字?

Vic*_*_Pk 51 c++

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

const T& data() const { return data_; }
Run Code Online (Sandbox Code Playgroud)

sta*_*ust 89

const T& data() const { return data_; }
^^^^^
Run Code Online (Sandbox Code Playgroud)

意味着它将返回(这里)的const引用Tdata_

Class c;
T& t = c.data()             // Not allowed.
const T& tc = c.data()      // OK.
Run Code Online (Sandbox Code Playgroud)

const T& data() const { return data_; }
                ^^^^^
Run Code Online (Sandbox Code Playgroud)

表示该函数不会修改该类的任何成员变量(除非该成员是mutable).

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

  • 除非它们被定义为"可变的";) (4认同)

Col*_*nee 21

const(和volatile)限定符结合到左侧.这意味着,只要您看到const,它就会应用于它左侧的令牌.但是有一个例外; 如果左边没有任何东西const,那么它就会绑定到右边.记住这些规则很重要.

在你的例子中,第一个const在它的左边没有任何东西,所以它绑定到右边,即T.这意味着返回类型是对a的引用const T.

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

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


Ed *_*eal 10

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

第二个表示该方法不会改变对象的状态。即该方法不改变任何成员变量。


shi*_*mar 6

const T& data() const { return data_; }
Run Code Online (Sandbox Code Playgroud)

成员函数后的 const 表示 data 是常量成员函数,并且在此成员函数中不修改任何数据成员。

const 返回类型表示将常量引用返回给 T