将静态全局变量声明为内联有任何意义吗?

use*_*538 8 c++ static global inline c++17

考虑一下,在头文件中声明了全局变量(不是静态类成员!):

inline static int i{};
Run Code Online (Sandbox Code Playgroud)

对于我测试过的几个编译器来说,它是有效的构造,并且实验证明,尽管也将其声明为内联的,但它们将在不同的转换单元中创建多个不同的对象(这意味着该变量中仅一个实例必须存在于程序中)。那么,static关键字比inline在这种情况下具有更高的优先级吗?

Sto*_*ica 7

那么,在这种情况下,静态关键字是否比内联更优先?

差不多。static具有干扰 的效果inline。C++ 标准指出

...具有外部链接的内联函数或变量在所有翻译单元中应具有相同的地址。

并且static限定符强加了内部链接,所以单地址保证不必成立。现在,在不同翻译单元中具有内部链接的名称旨在表示每个 TU 中的不同对象,因此打算获得多个不同的i's。

总而言之,static否定inline. 并且在static inline普通变量之上有一个变量是没有意义的static