提问者:小点点

与标准中隐含此参数的定义相矛盾


我正在学习C语言的课程。我从标准中看到了以下语句:

在重载解析期间,类X的非静态cv限定成员函数被视为一个函数,如果它没有ref限定符或具有左值ref限定符,则该函数将左值引用类型的隐式参数带到cv限定X。否则(如果它有rvalue ref限定符),它将被视为一个函数,将rvalue reference类型的隐式参数作为cv限定的X。

上述语句似乎暗示,对于类的限定非静态成员函数,类的限定非静态成员函数将具有类型为常量X的隐式参数

但后来我也遇到了:

类的成员函数中此的类型为X*(指针指向X)。如果成员函数是cv限定的,则其类型为cv X*(指针指向相同的cv限定X)。由于构造函数和析构函数不能是cv限定的,因此即使在构造或销毁const对象时,它们中的类型也始终是X。

因此,根据上面的第二个引用,类X的const限定非静态成员函数的隐式this参数的类型为const X*

我的问题是为什么会有这样的区别。我的意思是在const定性的非静态成员函数的重载解析期间,为什么隐式参数被认为是const X


共1个答案

匿名用户

隐式对象参数与此参数不同这是一个指针,指向调用成员函数的对象,而隐式对象参数是成员函数的第一个想象参数,在成员函数调用中传递对象表达式(成员访问表达式中的剩余部分),因此应该是引用参数。

为隐式对象参数使用指针是没有意义的。这样就不可能在对象表达式的值类别上重载函数。如果成员函数为<代码>

所以隐式对象参数是const T