先看看这个函数:
const Class & function(const Class & c) const;
这其中有三处使用了 const 修饰符,许多同学只是知道 const 是用来修饰变量或者函数的修饰符,使被修饰的对象不能被改变,但不是很清楚 const 在不同位置表示的意思。下面依次介绍上面这个函数中三处 const 的具体意思。
函数的返回值为 const引用(return c),所以函数声明与函数定义保持一致,使用 const引用。
函数不修改此引用参数。
在成员函数后面加 const 表明这个成员函数为 const成员函数。在非成员函数中,如果我们不希望改变函数的特征标,可以将函数参数声明为 const 引用,或者指向 const 的指针来解决。但是如果是类的成员函数,它所使用的对象是由方法调用隐式地接受的,故特征标中没有该对象,所以之前的方法失效。C++中有一种新的语法——在函数的括号后面加上 const,标志这是一个 const成员函数,即:该方法不修改调用的对象。这里有个隐含的意思是:const 限定符将this指针限定为 const,这样将不能使用this来修改对象的值。
就像应该尽可能的将 const引用和指针用作函数形参一样,只要类方法不修改调用的对象,就应将其声明为 const。