1

考虑以下简单示例:

#include <iostream>

int a=5;//1
extern int a;//2

int main(){ cout << a; }

该标准说(第 3.4/1 节):

名称查找应找到名称的明确声明

和(第 3.4.1/1 节):

一旦找到名称的声明,名称查找就会结束。

问题:在我的案例中会找到什么声明(1 或 2),为什么?

4

1 回答 1

2

该子句表示名称查找在命中时停止int a=5;

这里只有一个名字,a在全局命名空间中。这不是模棱两可的,因为只有一个a,如果有多个声明也没关系a。两个声明,一个名字。(“模棱两可”的情况只能发生在类成员名称查找中,该部分对此进行了更全面的描述)。

我从您的措辞中了解到,根据 1 或 2 是否满足此条款,您期望会有某种不同的行为;但没有。

于 2014-05-31T05:05:47.400 回答