C++ 中的名称查找机制详解
1. 成员访问运算符
成员访问运算符( . 或 -> )的规则相对简单。其左侧对象决定了查找的上下文,该对象必须是类类型(或类类型的指针、引用),右侧名称必须是该类或其祖先类的数据成员或成员函数。查找从对象的声明类型开始,接着查找其基类(若有多个基类,按声明顺序从左到右查找),以及基类的基类,依此类推,直到找到匹配名称的类为止。
若右侧名称是函数,编译器会收集同一类中同名的所有声明,并根据函数和运算符重载规则选择一个函数。注意,编译器不会考虑祖先类中的函数,一旦找到名称,查找即停止。若希望基类的名称参与运算符重载,可在派生类中使用 using 声明将基类名称引入派生类上下文。
在成员函数体中,左侧对象可以是 this 关键字,它是成员访问运算符左侧对象的指针。若成员函数用 const 限定符声明, this 是指向 const 的指针。若基类依赖于模板参数,编译器在模板实例化之前不知道哪些成员是从基类继承的,此时应使用 this-> 访问继承成员,告知编译器该名称是成员名称,编译器会在模板实例化时查找该名称。
以下是成员访问运算符的示例代码:
import <cmath>;
import <iostream>;
template<class T>
class point2d
超级会员免费看
订阅专栏 解锁全文
953

被折叠的 条评论
为什么被折叠?



