更多的是修辞问题(和咆哮)。每次我必须创建一个展示static const char* const
(如static const char* const class_name = "ClassA";
)作为类成员的库时,我才知道该库不再是仅限标题 - 我必须提供{{ 1}}文件,包含此变量及其值的定义。
相反,我必须将它转换为.cpp
函数static
,返回指针。
然后C ++ 11来了,现在我可以name()
作为我的成员 - 我甚至可以在我的标题中给它一个值!但我还是要提供这个定义......所以我一点也不兴奋。
为什么会这样?如果编译器在编译时可以评估static constexpr char[]
,为什么我需要对它进行定义?为什么它必须有联系?
答案 0 :(得分:0)
由于一个定义规则,静态强制您在标头外部声明它。此规则意味着您不能再一次声明相同的变量。如果你可以在标题中声明它并且你在两个地方包含了标题,你可以将变量声明两次。
但是,正如您可以编译时间一样,您可以为您的程序节省大量启动时间(请记住斐波纳契示例)
底线:你有静态变量语法的一部分,但你可以用它保存一些运行时
此处有关静态部分的详细信息:
Why does constexpr static member (of type class) require a definition?