这有点奇怪,也不是很实用,但我在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',但它们的定义不同。我希望编译器会抱怨,但事实并非如此。为什么会这样呢?
发布于 2020-10-26 20:59:10
你正在陷入一种不确定的行为中。
编译器不会说任何话,因为:
每个程序应该只包含一个定义,每个非内联函数或变量在该程序中使用的odr-被丢弃的语句之外;不需要诊断。该定义可以显式地出现在程序中,它可以在标准或用户定义库中找到,或者(在适当的时候)它是隐式定义的(参见class.ctor、class.dtor和class.copy)。内联函数或变量应在其odr使用的每个翻译单元中定义,在被丢弃的语句之外。
有关该here的更多详细信息,请参阅cppreference site
https://stackoverflow.com/questions/64537486
复制相似问题