当我只是检查哪些链接被授予外部局部变量时,
我发现编译器之间的一些不同行为
例如,如果我测试了下面的代码,
正如您在评论中看到的那样,变量vars 有不同的链接
// foo.cpp
int var = 10; // external linkage
// main.cpp
#include <iostream>
static int var = 100; // internal linkage
int main() {
extern int var; // internal linkage
std::cout << var << std::endl;
{
extern int var; // g++: external linkage , clang++: internal linkage
std::cout << var << std::endl;
{
extern int var; // g++: external linkage , clang++: internal linkage
std::cout << var << std::endl;
}
}
}
Run Code Online (Sandbox Code Playgroud)
结果是 …
我在 C++ 标准的第 3 章“基本概念”中看到了一句话。
为什么指针不被归类为实体?即使其中包含引用。
实体是值、对象、引用、函数、枚举数、类型、类成员、位域、模板、模板特化、命名空间或参数包。