非成员函数不能有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 (或volatileconst volatile ),因此可以在具有该限定的实例上调用成员函数。

免费函数(和类静态函数)没有this指针。

众所周知,在参数列表之后跟着const关键字指示这是一个指针常量的指针。

有一个非成员函数,它不属于类,所以添加const对立的结束错误发生。

解决问题的方法:是成为一个类成员函数或者去除const关键字const的相对结束