在编写以下函数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对端