我对C ++ 17引入的inline variable
感到有些困惑。 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;
}
任何解释都将不胜感激!
答案 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
没有任何净影响。
class
,struct
或union
内的变量只有声明为static
时才有静态存储持续时间。如果要变为static
,那些变量必须为inline
。