gpt4 book ai didi

c++ - [basic.lookup]/1最后一句是什么意思?

转载 作者:太空宇宙 更新时间:2023-11-04 12:59:58 24 4
gpt4 key购买 nike

[basic.lookup]/1 :

The name lookup rules apply uniformly to all names (including typedef-names (10.1.3), namespace-names (10.3), and class-names (12.1)) wherever the grammar allows such names in the context discussed by a particular rule. Name lookup associates the use of a name with a set of declarations (6.1) of that name. The declarations found by name lookup shall either all declare the same entity or shall all declare functions; in the latter case, the declarations are said to form a set of overloaded functions (16.1). Overload resolution (16.3) takes place after name lookup has succeeded. The access rules (Clause 14) are considered only once name lookup and function overload resolution (if applicable) have succeeded. 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 (Clause 8).

名称声明引入的那些属性是什么?

最佳答案

这句话可见于N1638 - C++ Working Draft从 2004 年 4 月开始,因此它并不具体指代 [[...]] 形式的属性,这些属性由 N2761 - Towards support for attributes in C++(Revision 6) 引入到标准中2008 年。

[基本查找]/1

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 (clause 5).

还有 [basic.def]/1

A declaration (clause 7) introduces names into a translation unit or redeclares names introduced by previous declarations. A declaration specifies the interpretation and attributes of these names.

从上面的内容,并查看该论文中其他五个出现的“属性”,在我看来,“属性”仅表示“关于名称的信息”。所以在这种情况下,externfriend、函数定义的主体,以及您可以在声明中对名称说的任何其他内容,都不是一部分决定名称的解释。

从 C++11 开始,这还将包括 [[..]] 形式的“通用属性”。这里有个提示,N2761没有引入“属性”,它只是为我们提供了它们的通用语法。

相反,函数参数在这个意义上不会是“属性”,因为函数名称的解释将参数作为重载决策的一部分。 返回类型 将是一个属性,因为在我们知道名称的含义以及我们选择的重载之前我们不会查看它。

在稍微更标准的意义上,我认为您可以说“说明符”是属性,而“声明符”指定名称的解释。

实际上,我会说(不检查更具体的规则)这是要求删除的函数在查找和名称解析过程中一直存在的规则,然后失败编译。

否则,一个狡猾的编译器作者可能希望通过提前消除已删除的函数来为他们的用户省去一些麻烦,理由是您不能调用已删除的函数,所以为什么要把它包含在过载设置?

关于c++ - [basic.lookup]/1最后一句是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44607634/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com