与标准中隐式此参数的定义相矛盾
Contradicting definition of implicit this parameter in the standard
我正在学习 C++ 中的 classes。我从标准中得出across以下声明:
During overload resolution, non-static cv-qualified member function of class X is treated as a function that takes an implicit parameter of type lvalue reference to cv-qualified X if it has no ref-qualifiers or if it has the lvalue ref-qualifier. Otherwise (if it has rvalue ref-qualifier), it is treated as a function taking an implicit parameter of type rvalue reference to cv-qualified X.
上面的语句似乎暗示对于 class X
的 const
限定非静态成员函数将具有类型 const X&
的隐式参数。
不过后来我也来了across:
The type of this
in a member function of class X
is X*
(pointer to X). If the member function is cv-qualified, the type of this is cv X*
(pointer to identically cv-qualified X). Since constructors and destructors cannot be cv-qualified, the type of this in them is always X*
, even when constructing or destroying a const object.
所以根据上面的第二个引用,class X
的 const 限定非静态成员函数的隐式 this 参数具有类型 const X*
.
我的问题是为什么会有这样的差异。我的意思是在 const 限定的非静态成员函数的重载解析期间,为什么隐式参数被视为 const X&
而不是简单的 const X*
这似乎是 this
的实际类型。
隐式对象参数与this
不同。 this
是一个指向调用成员函数的对象的指针,而隐式对象参数是成员函数的想象的第一个参数,它在成员函数调用中传递给对象表达式( [ 剩下的部分) =12=] 在成员访问表达式中)等应该是一个引用参数。
为隐式对象参数使用指针是没有意义的。这将使得不可能在对象表达式的值类别上重载函数。如果成员函数是 &&
限定的,则隐式对象参数是右值引用,因此如果对象表达式是右值重载决策,则可以使用 &
限定的成员函数正确重载。
所以隐式对象参数在您的示例中是 const T&
,但是 this
的类型是 const T*
。没有矛盾。
我正在学习 C++ 中的 classes。我从标准中得出across以下声明:
During overload resolution, non-static cv-qualified member function of class X is treated as a function that takes an implicit parameter of type lvalue reference to cv-qualified X if it has no ref-qualifiers or if it has the lvalue ref-qualifier. Otherwise (if it has rvalue ref-qualifier), it is treated as a function taking an implicit parameter of type rvalue reference to cv-qualified X.
上面的语句似乎暗示对于 class X
的 const
限定非静态成员函数将具有类型 const X&
的隐式参数。
不过后来我也来了across:
The type of
this
in a member function of classX
isX*
(pointer to X). If the member function is cv-qualified, the type of this iscv X*
(pointer to identically cv-qualified X). Since constructors and destructors cannot be cv-qualified, the type of this in them is alwaysX*
, even when constructing or destroying a const object.
所以根据上面的第二个引用,class X
的 const 限定非静态成员函数的隐式 this 参数具有类型 const X*
.
我的问题是为什么会有这样的差异。我的意思是在 const 限定的非静态成员函数的重载解析期间,为什么隐式参数被视为 const X&
而不是简单的 const X*
这似乎是 this
的实际类型。
隐式对象参数与this
不同。 this
是一个指向调用成员函数的对象的指针,而隐式对象参数是成员函数的想象的第一个参数,它在成员函数调用中传递给对象表达式( [ 剩下的部分) =12=] 在成员访问表达式中)等应该是一个引用参数。
为隐式对象参数使用指针是没有意义的。这将使得不可能在对象表达式的值类别上重载函数。如果成员函数是 &&
限定的,则隐式对象参数是右值引用,因此如果对象表达式是右值重载决策,则可以使用 &
限定的成员函数正确重载。
所以隐式对象参数在您的示例中是 const T&
,但是 this
的类型是 const T*
。没有矛盾。