我的应用程序中有以下代码。为什么我们将const
关键字与返回类型一起使用,并在方法名称之后使用?
const T& data() const { return data_; }
答案 0 :(得分:83)
const T& data() const { return data_; }
^^^^^
表示它会返回const
对T
的引用(此处为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