非成员函数不能有cv-qualifier

A. *_* K. 46 c++ templates const

在编写以下函数时abs,我收到错误:

非成员函数unsigned int abs(const T&)不能有cv-qualifier.

template<typename T>
inline unsigned int abs(const T& t) const
{
    return t>0?t:-t;
}
Run Code Online (Sandbox Code Playgroud)

删除const函数的限定符后,没有错误.由于我没有t在函数内部进行修改,因此上面的代码应该编译.我想知道为什么我得到错误?

Att*_*ila 97

你不想修改的愿望t表达在const T& t.结尾const指定您不会修改该类abs所属的任何成员变量.由于此函数所属的类没有,因此会出错


Bo *_*son 32

const函数声明末尾的修饰符适用this于成员函数的隐藏参数.

因为这是一个自由函数,所以没有,this并且不需要那个修饰符.

参数列表中的t参数已经有了自己const的参数.


eca*_*mur 12

成员函数上的cv限定符指定this指针具有间接类型const(或volatile,const volatile),因此可以在具有该限定条件的实例上调用成员函数.

自由函数(和类静态函数)没有this指针.