C++17 内联变量与内联静态变量

Jes*_*Jes 7 c++ c++17

我对inline variableC++17的介绍有点困惑。inline variable和之间有什么区别inline static variable?这也会受到范围的影响吗?

inline T var_no_scope;
inline static T static_var_no_scope;

namespace scope {
  inline T var_scope;
  inline static T static_var_scope;
}
Run Code Online (Sandbox Code Playgroud)

任何解释将不胜感激!

Hol*_*Cat 9

在命名空间范围内:

inline static似乎相当于刚刚static

inline仅当您在多个翻译单元中定义相同的变量时,变量上才有效。由于static将变量限制为单个 TU,因此您不能有多个定义。

在班级范围内:

inline只能出现在static变量上。

它具有正常的效果,允许您直接在标头中初始化变量。任何一个:

struct A
{
    inline static int a = 42;
};
Run Code Online (Sandbox Code Playgroud)

或者:

struct A
{
    static int a;
};

inline int A::a = 42;
Run Code Online (Sandbox Code Playgroud)

在函数范围内:

inline不允许。


Ja_*_*cpp 7

对我来说,当它是数据成员时,它会变得更有趣。C++17您可以将静态数据成员声明为inline. 优点是您不必在source file. 例如:

class A
{
// Omitted for brevity
static inline int b = 0;
};
Run Code Online (Sandbox Code Playgroud)

所以int A::b;可以从源文件中删除。