gpt4 book ai didi

c++ - 函数体中声明的名称的非限定名称查找

转载 作者:行者123 更新时间:2023-11-28 06:52:36 25 4
gpt4 key购买 nike

我遇到过声明定义:

A declaration is a definition unless it declares a function without specifying the function’s body

#include <stdio.h>
void foo()
{
printf("foo\n");

}



int main()
{
void foo();
foo();
}

3.3中说

The scope of a declaration is the same as its potential scope unless the potential scope contains another declaration of the same name.

问题 1. 这是否意味着在我的情况下,当我们将 foo 重新声明到 main 函数中时,重新声明的 foo 实际上表示的实体不同于声明到全局范围内的 foo 表示的实体?

问题 2.为什么非限定名称查找解析会给出一个由“global”foo 表示的实体?

更新:如果我们考虑以下内容

#include <stdio.h>
int a=42;

int main()
{
int a;
printf("%d\n",a); //Garbage
}

然后函数范围内的 a 不表示为全局 a。怎么解释呢?

最佳答案

1. 不,它表示全局foo()。在 main 中,您正在重新声明 名称,而不是定义。如果 foo 有另一个定义,那么它将违反 One Definition Rule ,程序将无法编译。

2. 我猜第一个答案也回答了这个问题。 foo() 只有一个定义,在全局范围内。所以不合格的名称查找将引用那个。

编辑

在后面的示例中,您在 main定义 a,它隐藏了全局 a。来自你的第一句话:

A declaration is a definition unless it declares a function without specifying the function’s body

a 不是一个函数,所以声明也是一个定义,隐藏了之前a的定义。

关于c++ - 函数体中声明的名称的非限定名称查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23645959/

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