70

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

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

4 回答 4

121
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'
}
于 2013-05-08T20:48:07.747 回答
27

( constand volatile) 限定符绑定到左侧。这意味着任何时候你看到const,它都会被应用到它左边的令牌上。但是,有一个例外;如果 左侧没有任何内容const,则改为绑定到右侧。记住这些规则很重要。

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

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

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

于 2013-05-08T20:51:52.463 回答
5

第一个const意味着该函数正在返回一个const T引用。

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

于 2013-05-08T20:49:46.963 回答
3
const T& data() const { return data_; }

成员函数后面的 const 表示数据是一个常量成员函数,在这个成员函数中没有数据成员被修改。

const 返回类型表示返回一个常量 ref 给 T

于 2013-05-08T20:48:44.950 回答