gpt4 book ai didi

c++ - 当名称出现在函数的 declarator-id 之前时,查找规则是什么?

转载 作者:行者123 更新时间:2023-12-02 01:25:42 25 4
gpt4 key购买 nike

#include <iostream>

typedef int Name;
Name func(int){
return 0;
}

int main(){
}

考虑上面的代码,我在 [basic.lookup.unqual] 中找不到可以解释如何查找 Name 的项目符号。用于定义func 。我将在这里引用一些潜在的规则:

  1. A name used in global scope, outside of any function, class or user-declared namespace, shall be declared before its use in global scope.

  2. A name used in a user-declared namespace outside of the definition of any function or class shall be declared before its use in that namespace or before its use in a namespace enclosing its namespace.

  3. In the definition of a function that is a member of namespace N, a name used after the function's declarator-id shall be declared before its use in the block in which it is used or in one of its enclosing blocks ([stmt.block]) or shall be declared before its use in namespace N or, if N is a nested namespace, shall be declared before its use in one of N's enclosing namespaces

请注意强调的部分,看来我的情况不满足这些要点,因为函数定义具有以下形式

function-definition:

attribute-specifier-seq(opt) decl-specifier-seq(opt) declarator virt-specifier-seq(opt) function-body

让我分析一下第一个项目符号。它说在任何函数之外,但根据 Function definitions rule ,我认为Name在函数(定义)内,项目符号 1 不满足。项目符号 2 与项目符号 1 类似。项目符号 3 表示在函数的 declarator-id 之后使用的名称,在我的例子中为 Name用在函数的 declarator-id 之前。那么本例中查找不合格名称Name的规则是什么呢? ?

我的困惑:

在我的示例中,Name , func , (int){ return 0;} (函数体)都是该函数定义的所有部分,所以:

  1. 什么是任何函数之外,例如 func在我的示例中,该函数外部的区域在哪里?
  2. 任何函数定义之外的内容,例如 func在我的示例中定义,该函数定义之外的区域在哪里?

最佳答案

I think that Name is within the function(definition), bullet 1 isn't satisfied.

第 1 条没有说“函数(定义)”。它说“在任何功能之外”。它没有指定声明或定义;只是“在任何功能之外”。

由于“函数”内部或外部不是一个定义的概念,因此必须将其理解为简单的英语。函数原型(prototype)是“函数之外”吗?从视觉上来说,函数原型(prototype)没有什么特别之处可以暗示内部/外部的区别。相比之下,函数体的 block 作用域确实表明了内部/外部的区别。

文本的意图当然是非常明显的;它正在谈论函数体。该规则等同于“函数”、“类”和“命名空间”,所有这些都有一个定义名称范围的 block 。这是任何内部/外部区别最合乎逻辑的地方,因此似乎很明显,全局作用域由函数体作用域、类定义作用域或作用域之外的所有内容组成。命名空间主体的。

因此,这可以通过编辑更改轻松处理。

<小时/>

请注意,委员会认为本节(以及该领域的其他部分)的措辞为 somewhat defective ,并且有一个 proposal for rewriting it into something more coherent在 C++23 中。提案中的新措辞完全重写了本节。

关于c++ - 当名称出现在函数的 declarator-id 之前时,查找规则是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61648593/

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