非成员函数不能具有 CV 限定符

non-member function cannot have cv-qualifier

本文关键字:CV 成员 函数 不能      更新时间:2023-10-16

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

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

众所周知,参数列表后面const关键字表示这是指向指针常量的指针。

有一个非成员函数,它不属于该类,所以添加常量相反端错误发生。

问题的解决方案:要么成为类成员函数,要么删除const关键字 const 的反端