我的应用程序中有以下代码。为什么我们const
在返回类型和方法名称之后使用关键字?
const T& data() const { return data_; }
const T& get_data() const { return data_; }
^^^^^
意味着它将返回对(here )的const
引用T
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'
}
( const
and volatile
) 限定符绑定到左侧。这意味着任何时候你看到const
,它都会被应用到它左边的令牌上。但是,有一个例外;如果 左侧没有任何内容const
,则改为绑定到右侧。记住这些规则很重要。
在您的示例中,第一个const
左侧没有任何内容,因此它绑定到右侧,即T
. 这意味着返回类型是对 a 的引用const T
。
第二个 const 在它的左边确实有一些东西;功能data()
。这意味着const
将绑定到函数,使其成为const
函数。
最后,我们有一个const 函数返回对 const T 的引用。
第一个const
意味着该函数正在返回一个const T
引用。
第二个说该方法没有改变对象的状态。即该方法不改变任何成员变量。
const T& data() const { return data_; }
成员函数后面的 const 表示数据是一个常量成员函数,在这个成员函数中没有数据成员被修改。
const 返回类型表示返回一个常量 ref 给 T