将静态全局变量声明为内联有什么意义吗?
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
变量是没有意义的。
考虑一下,全局变量(非静态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
变量是没有意义的。