我正在学习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
隐式对象参数与此参数不同这是一个指针,指向调用成员函数的对象,而隐式对象参数是成员函数的第一个想象参数,在成员函数调用中传递对象表达式(成员访问表达式中的剩余部分),因此应该是引用参数。
为隐式对象参数使用指针是没有意义的。这样就不可能在对象表达式的值类别上重载函数。如果成员函数为<代码>
所以隐式对象参数是const T