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

问题描述 投票:51回答:4

[在编写以下函数abs时,出现错误:

非成员函数unsigned int abs(const T&)不能具有简历限定符。

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

删除该函数的const限定符后,没有错误。由于我没有在函数内部修改t,因此上述代码应已编译。我想知道为什么会出现错误?

c++ templates const
4个回答
106
投票

您不希望修改t的要求以const T& t表示。结尾const指定您将不修改类abs所属的任何成员变量。

由于此函数所属的类不存在,因此会出现错误。


32
投票

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

因为这是一个自由函数,所以没有this,不需要该修饰符。

t参数在参数列表中已经具有自己的const


12
投票

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

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


3
投票

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

有一个非成员函数,它不属于该类,因此添加const会出现相反的结尾错误。

问题的解决方案:成为类成员函数或除去对端的const关键字const

© www.soinside.com 2019 - 2024. All rights reserved.