名称和限定名
名称使用二进制范围解析运算符 (::) 称为 “限定名”。指定名称,以二进制范围解析运算符必须是类的成员指定运算符左侧的或其基类后的成员。
指定的名称,在成员选择运算符 (. 或 – AMP_GT) 后必须是对象的类类型其基类的成员指定运算符左侧的或成员。名称指定在成员选择运算符 () 右侧**– AMP_GT也可以是另一个类类型的对象,,在 – AMP_GT 的左边是类对象条件下,类定义计算为指向其他一些类类型的重载成员选择运算符 (– AMP_GT**)。(此提供在 类成员访问更详细的讨论。)
编译器按下列顺序搜索的名称,停止,当找到该名称:
,如果名称在函数内部使用,当前块范围;否则,全局范围。
向外通过将每个块范围,包括函数参数) 的最外面的功能范围 (。
如果名称使用在成员函数内,类的范围中搜索该名称。
类的基类中搜索该名称。
(如果有) 将嵌套类范围,并且其基础进行搜索。搜索继续,直到最外面的封闭类范围中搜索。
全局范围中搜索。
但是,您可以对此搜索顺序的修改如下所示:
:: 后的名称强制搜索以在全局范围内。
类、 struct和 联合 关键字之后的名称强制编译器将只搜索 类、 struct或 联合 名称。
在范围解析运算符 (::) 左边的名称可以是 类、 struct、 命名空间或只 联合 名称。
如果该名称引用非静态成员,但在静态成员函数,错误消息生成。同样,因此,如果该名称引用封闭类的任何非静态成员,错误信息生成,因为封闭类没有封闭类的 这 指针。