非成员函数不能有cv-qualifier
在写下面的函数abs
,我得到错误:
非成员函数unsigned int abs(const T&)
不能有cv-qualifier。
template<typename T> inline unsigned int abs(const T& t) const { return t>0?t:-t; }
删除该const
限定符后,没有错误。 由于我不修改t
里面的上面的代码应该编译。 我想知道为什么我得到错误?
你不想修改t
愿望是用const T& t
。 结束const
指定你不会修改类abs
所属的任何成员variables。 由于这个函数不属于这个类,所以你会得到一个错误
函数声明结尾处的const
修饰符适用于成员函数隐藏的this
参数。
由于这是一个免费的function,没有this
,修饰符是不需要的。
t
参数在参数列表中已经有了自己的const
。
成员函数的cv-qualifier指定this
指针的types是const
(或volatile
, const volatile
),因此可以在具有该限定的实例上调用成员函数。
免费函数(和类静态函数)没有this
指针。
众所周知,在参数列表之后跟着const
关键字指示这是一个指针常量的指针。
有一个非成员函数,它不属于类,所以添加const对立的结束错误发生。
解决问题的方法:是成为一个类成员函数或者去除const
关键字const的相对结束