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

时间:2018-05-24 18:06:55

标签: c++ c++17

我对C ++ 17引入的inline variable感到有些困惑。 inline variableinline 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;
}

任何解释都将不胜感激!

2 个答案:

答案 0 :(得分:2)

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

class A
{
// Omitted for brevity
static inline int b = 0;
};

因此可以从源文件中删除int A::b;

答案 1 :(得分:2)

inline仅适用于static storage duration的变量。

示例中的所有变量都有namespace scope,为它们提供静态存储持续时间。如果它们是static,则声明它们inline没有任何净影响。

classstructunion内的变量只有声明为static时才有静态存储持续时间。如果要变为static,那些变量必须为inline