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

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

const T& data() const { return data_; }
65280 次浏览
const T& get_data() const { return data_; }
^^^^^

意味着它将返回一个 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 T& data() const { return data_; }

Const after member 函数指示数据是一个常数成员函数,在此成员函数中不修改任何数据成员。

Const 返回类型表示将常量 ref 返回给 T

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

第二种说法是该方法不改变对象的状态。也就是说,该方法不改变任何成员变量。

const(和 volatile)限定符 绑在左边。这意味着无论何时您看到 const,它都会应用到它左边的标记。但是,有一个例外; 如果 const的左边没有任何东西,那么它将绑定到右边。记住这些规则很重要。

在您的示例中,第一个 const在它的左边没有任何东西,所以它绑定到了右边,也就是 T。这意味着返回类型是对 const T的引用。

第二个 const 在它的左边有一个函数 data()。这意味着 const将绑定到函数,使其成为 const函数。

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