[在编写以下函数abs
时,出现错误:
非成员函数unsigned int abs(const T&)
不能具有简历限定符。
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