可以将变量重新声明为推导为相同类型的auto吗?

Jam*_*ree 16 c++ extern language-lawyer auto c++11

标准是否允许以下​​内容?

#include <iostream>

extern int a;
auto a = 3;

int main(int, char**)
{
    std::cout << a << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

clang接受代码. g ++抱怨声明冲突.

Aru*_*nmu 2

从标准来看,我不太清楚,但是,有这么写

第 7.1.6.4 节 auto 说明符
在本节未明确允许的上下文中使用 auto 的程序是格式错误的。

更好地阅读标准中提到的所有允许的上下文部分。

考虑到这一点,我相信 g++ 是正确的,而 clang 是错误的。但我可能是错的,标准中可能有一些单独的部分可能暗示着这种背景,但我找不到它。

  • 但是这里的“auto a = 3;”是一个明确允许的上下文。“在块 (6.3)、**命名空间范围** (3.3.6)、[...] 中声明变量时允许使用此用途” (2认同)