结果是100还是输出200呢?

a.cpp中有如下代码

inline int a=100;
void func()
{
  std::cout<

b.cpp中有如下代码

void func();
inline int a=200;
int main()
{
  func();
|

结果是100还是输出200呢?我看有的人输出结果是200,但我的结果是100??

不是100么,应该就是100啊

输出的是100,inline是内联关键字,编译器会直接把a放到引用a的地方去,运行过程中,不会再次引用原始的a,因此再对a进行更改,不会影响原来fun的输出。

回答如下,记得采纳一下哦!
根据 C++ 标准的规定,在不同编译单元中定义的具有相同名称的非-extern 非-inline 对象(例如 a.cpp 中的 a 和 b.cpp 中的 a)是不可视的,也就是它们不是同一个对象,无法相互访问或影响。
你这个func 函数在 b.cpp 中声明为外部函数,因此它的定义将在链接时解析。由于 a 在 b.cpp 中定义,而 a.cpp 中的 a 对 b.cpp 是不可见的,因此 func 函数只能访问 b.cpp 中的 a,该变量的值为 200。因此该程序应输出 200。
但是,如果编译器将 a.cpp 和 b.cpp 合并为一个编译单元编译,那么两个 a 将成为同一个对象,且值为 100。因此输出的结果可能因编译器而异。