constexpr char []作为班级成员有什么好处?

时间:2016-01-28 16:33:30

标签: c++ c++11

更多的是修辞问题(和咆哮)。每次我必须创建一个展示static const char* const(如static const char* const class_name = "ClassA";)作为类成员的库时,我才知道该库不再是仅限标题 - 我必须提供{{ 1}}文件,包含此变量及其值的定义。

相反,我必须将它转换为.cpp函数static,返回指针。

然后C ++ 11来了,现在我可以name()作为我的成员 - 我甚至可以在我的标题中给它一个值!但我还是要提供这个定义......所以我一点也不兴奋。

为什么会这样?如果编译器在编译时可以评估static constexpr char[],为什么我需要对它进行定义?为什么它必须有联系?

1 个答案:

答案 0 :(得分:0)

  • 您正在谈论静态 constexpr,因此您必须处理静态关键字
  • 由于一个定义规则,静态强制您在标头外部声明它。此规则意味着您不能再一次声明相同的变量。如果你可以在标题中声明它并且你在两个地方包含了标题,你可以将变量声明两次。

  • 但是,正如您可以编译时间一样,您可以为您的程序节省大量启动时间(请记住斐波纳契示例)

底线:你有静态变量语法的一部分,但你可以用它保存一些运行时

此处有关静态部分的详细信息:

Why does constexpr static member (of type class) require a definition?