【发布时间】:2020-10-26 12:52:34
【问题描述】:
有点奇怪,不是很实用,但我在 cpp 中使用内联尝试一些随机的东西,我想试试这个:
inline void foo(void){static int x=0; x++; cout << x << '\n'; return;};
在另一个 .cpp 文件中我得到了:
inline void foo(void){static int x=0; x=x+2; cout << x << '\n'; return;};
现在,这出于某种原因(相同的函数类型/名称)但不同的主体,它们都共享相同的'x',但它们的定义不一样。我希望编译器会抱怨,但事实并非如此。这是为什么呢?
【问题讨论】:
-
如果有人会抱怨,那就是链接器。我链接的问题与您的问题非常相似,尽管我没有提出它是重复的,因为它使用模板并且案例涉及更多一点,尽管那里给出的答案也适合这里
标签: c++ inline one-definition-rule