你好,如果我有一个static const
数据成员,那么我可以为它提供一个类内初始化程序,我不需要在类主体之外再次定义它。
但只有当该常量在类范围内使用并且如果在外部使用时,必须在外部提供单独的定义,否则对它的任何引用都会导致链接时错误:“未定义对静态对象的引用:x”。
struct Foo{ static int const sz_ = 100; std::array<int, sz_> ai_100{}; }; //int const Foo::sz_; int main(){ float pts[Foo::sz_]{}; // ok void bar(int const&); // defined later on bar(Foo::sz_); // undefined reference to Foo::sz_ } void bar(int const&){ //do_something }
为什么在类范围之外使用
static const
数据成员作为数组大小是可以的?sz_
为什么当传递给对链接器进行左值引用的
sz
函数时无法链接并抱怨 的定义?bar
const
Foo::sz_
该函数
bar
接受一个左值引用,const int&
因此它可以从一个右值初始化,那么为什么它对初始化器的定义很重要Foo::sz_
?