21
A
回答
21
一个static constexpr
会隐也inline
,否则就需要将其标记为inline
template<typename T>
struct SomeClass {
inline static T test; // Now inline
};
struct SomeClass2 {
static constexpr int test = 9; // inline
};
CFR。从n4606 [depr.static_constexpr]
对于与现有C++国际标准的相容性,一个constexpr静态数据成员可以被冗余地重新声明类的外部与没有初始化。此用法已弃用。
实施例:
struct A { static constexpr int n = 5; // definition (declaration in C++ 2014) }; const int A::n; // redundant declaration (definition in C++ 2014)
和[dcl.constexpr]
(巴里打我给它)
函数或静态数据成员与constexpr说明符声明是隐式地内联函数或变量(7.1 0.6)。
11
从[dcl.constexpr]:
的函数或与该
constexpr
说明符声明静态数据成员可隐式的内联函数或变量(7.1.6)。
对于类模板的静态(非constexpr
)数据成员没有这样的隐式inline
。然而,在C++ 17,我们现在可以标记变量本身作为inline
,[dcl.inline]:
与
inline
说明符的变量声明声明内嵌变量。