我的应用程序中有以下代码。为什么我们const在返回类型和方法名称之后使用关键字?
const T& data() const { return data_; }
const T& get_data() const { return data_; }
^^^^^
意味着它将返回对(here )的const引用Tdata_
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'
}
( constand 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