在哪里我可以找到 C++ 兼容编译器必须应用才能执行的规则列表名称解析(包括超载)?
我想要一些自然语言算法或流程图之类的东西。
C++ 标准当然有这套规则,但它是随着新语言语句的引入而建立的,结果很难记住。
长话短说,我想知道这个问题的完整而详细的答案”当编译器看到名称“A”时会做什么?"
我知道 C++ 就是全部”当 X 成立时,我们会这样做,但如果 Z 成立,则不做 Y“所以,我想问是否可以使其更加线性。
EDIT:我正在起草这个主题的草案,一旦发布可能会集体改进。不过我这几天很忙,可能需要一些时间才能发布一些东西。如果有人感兴趣,我会将“原始 txt 文件上的个人注释”提升为更好的内容并发布。
好吧,概括地说:
如果名称前面有::
, as in ::A
or X::A
,然后使用限定名称查找。首先查找X
,如果存在(如果不使用全局命名空间),则在其内部查找A
. If X
是一个类,并且A
不是直接成员,然后查看所有直接基地X
. If A
发现多个基地,失败。
否则,如果该名称用作函数调用,例如A( X )
, use 参数相关的查找。这是最难的部分。寻找A
在命名空间中的类型X
被宣布在,在朋友中X
, 而如果X
是一个模板实例化,对于所有涉及的参数也是如此。仅关联的范围typedef
请勿应用。除了不合格的查找之外,还执行此操作。
从...开始不合格的查找如果参数相关的查找不适用。这是查找变量的常用方法。从当前范围开始并向外工作,直到找到名称。请注意,这尊重using namespace
指令,而其他两种情况则没有。
只需浏览一下该标准就会发现许多例外和陷阱。例如,使用不合格查找来确定whether在使用 ADL 生成潜在重载列表之前,该名称用作函数调用,而不是强制转换表达式。非限定查找不会在本地类嵌套的封闭范围内查找对象,因为此类对象在引用时可能不存在。
当直觉失败时(这种情况经常发生),应用常识并提出更具体的问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)