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

Is there any sense to declare static global variable as inline?

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

inline static int i{};

这是我测试过的几个编译器的有效构造,实验表明,几个不同的对象将在不同的翻译单元中创建,尽管它也被声明为内联(这意味着该变量的一个实例必须存在在程序中)。那么,在那种情况下,static 关键字的优先级是否高于 inline

So, has static keyword more priority than inline in that case?

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

... An inline function or variable with external linkage shall have the same address in all translation units.

并且 static 限定符强加了 内部链接 ,因此不必保持单一地址保证。现在,在不同翻译单元中具有内部链接的名称意味着在每个 TU 中表示不同的对象,因此要获得多个不同的 i

总而言之,static 否定了 inline。在普通的 static 上使用 static inline 变量是没有意义的。