参数匹配和 this 指针

处理类成员函数的方式各不相同,具体取决于它们是否已被声明为 static。 由于非静态函数具有提供 this 指针的隐式参数,因此将非静态函数视为比静态函数多一个参数;否则,将以相同的方式声明这些函数。

这些非静态成员函数要求隐含的 this 指针与通过其调用函数的对象类型匹配,或者对于重载运算符,它们要求第一个参数与该运算符应用于的对象匹配。(有关重载运算符的详细信息,请参阅重载运算符。)

与重载函数中的其他参数不同,当尝试匹配 this 指针参数时,不会引入临时对象,且不会尝试转换。

当 – > 成员选择运算符用于访问成员函数时,this 指针参数具有 class-name * const 的类型。 如果将成员声明为 const 或 volatile,则类型分别为 const class-name* const 和 volatile class-name * const。

. 成员选择运算符以相同的方式工作,只不过隐式 & (address-of) 运算符将成为对象名称的前缀。 下面的示例演示了此工作原理:

// Expression encountered in code
obj.name

// How the compiler treats it
(&obj)->name

处理 –>* 和 .*(指向成员的指针)运算符的左操作数的方式与处理与参数匹配相关的 . 和 –>(成员选择)运算符的方式相同。

请参见

参考

参数匹配