微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c – 什么是名称查找机制?

我想知道C名称查找机制是什么.

解决方法

名称查找是识别名称含义的过程.名称查找有两个目的

>消除代码解析的歧义
>确定代码的精确含义

例如,如果你有这个代码

T(a);

它取决于T是否是一个类型:如果它是一个类型,它将是a的声明,如果它不是一个类型,它被解释为一个函数调用.

Some names denote types or templates. In general,whenever a name is encountered it is necessary to determine whether that name denotes one of these entities before continuing to parse the program that contains it. The process that determines this is called name lookup.

Name lookup associates the use of a name with a declaration (3.1) of that name.

有两个主要的名称查找类

>非限定名称查找:从当前作用域开始,查找名称,如果在类中,则转义为封闭的作用域和基类.不从特定的命名范围开始.一旦找到名称,此查找表单就会停止.因此,内部作用域(或类)中的名称隐藏了在外部作用域(或基类)中找到的名称.
>限定名称查找:使用::运算符在给定范围内查找名称.

存在其他几种形式,例如查找出现在点或箭头之后的名称(如ptr-> foo)或查找类foo中的名称(忽略非类型名称).一个特别有趣的形式是argument dependent lookup,用于根据函数调用中使用的参数类型查找函数声明.

名称查找找到一个声明后,它会检查它获得了什么属性以及程序是否可以使用它.

Only after name lookup,function overload resolution (if applicable) and access checking have succeeded are the attributes introduced by the name’s declaration used further in expression processing

因此,名称查找将找到私有类成员,但如果您使用这些名称,如果您无法访问它们,则会拒绝您的代码.即使基类具有与公共访问相同的名称,也是如此 – 这是因为如果找到名称,则名称查找在派生类中停止.

原文地址:https://www.jb51.cc/c/119607.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐