在编写以下函数abs时,我收到错误:
非成员函数unsigned int abs(const T&)不能有 cv 限定符。
template<typename T>
inline unsigned int abs(const T& t) const
{
return t>0?t:-t;
}
删除const函数的限定符后没有错误。由于我没有t在函数内部进行修改,因此上面的代码应该已经编译。我想知道为什么我得到了错误?
您不想修改t的愿望以const T& t. 结尾const指定您不会修改该类abs所属的任何成员变量。
由于没有此函数所属的类,因此您会收到错误消息。
const函数声明末尾的修饰符适用于成员this函数的隐藏参数。
由于这是一个免费功能,因此没有this并且不需要该修饰符。
该t参数在参数列表中已有自己const的参数。
成员函数上的 cv 限定符指定this指针具有间接类型const(或volatile, const volatile),因此可以在具有该限定的实例上调用成员函数。
自由函数(和类静态函数)没有this指针。
众所周知,const参数列表后面的关键字表示这是一个指向指针常量的指针。
有一个非成员函数,它不属于该类,所以添加 const 对端错误。
解决问题:要么成为类成员函数,要么去掉const关键字const对端