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

时间:2013-05-08 20:46:51

标签: c++

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

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

4 个答案:

答案 0 :(得分:83)

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

表示它会返回constT的引用(此处为data_

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


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

表示该函数不会修改该类的任何成员变量(除非该成员为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'
}

答案 1 :(得分:19)

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

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

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

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

答案 2 :(得分:4)

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

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

答案 3 :(得分:3)

const T& data() const { return data_; }
成员函数后的

const表示数据是常量成员函数,在此成员函数中没有数据成员被修改。

const返回类型表示将常量ref返回到T