1

这是导致编译时错误的代码:

#include <iostream>

int a;

void f()
{
    using ::a;
    using ::a; //'a' is already declared in this scope. 
}

int main(){ }

演示

标准所说的是(N4296::7.3.3/10 [namespace.udecl]):

using-declaration 是一种声明,因此可以在允许(并且仅在)允许多个声明的地方重复使用。

所以,我认为任何重新声明在块范围内都是不正确的。但节目

#include <iostream>

void f()
{
    extern int a;
    extern int a;
}

int main(){ }

演示

工作正常。那么为什么 using 重新声明实际上阻止了在块范围内出现两次呢?

4

0 回答 0