【问题标题】:Why does c++ class need to define static field(data member) outside the class scope? [duplicate]为什么 c++ 类需要在类范围之外定义静态字段(数据成员)? [复制]
【发布时间】:2012-06-18 05:49:55
【问题描述】:

可能重复:
Initializing private static members
Why I can't initialize non-const static member or static array in class?

这对我来说很奇怪。为什么不假设全局范围内有一个静态字段?

【问题讨论】:

  • Relevant。这能回答你的问题吗?
  • 因为它仍然使用单独的编译模型,当模块启动时(就像在其他语言中一样),那么这将成为一个非问题。

标签: c++ oop initialization static-initialization


【解决方案1】:

它必须放在某个地方(在某个目标文件中),以便链接器可以找到它。如果您在 .h 文件中声明了带有静态文件的类,并将该文件包含在几个 .cpp 文件中,那么应该为该文件分配哪个目标文件的位置将是模棱两可的。

另请注意,原始类型const static 字段可以在类声明中初始化:

class Foo
{
    static const int n = 42;
};

【讨论】:

  • 其实只有const整型和const枚举可以在类声明中初始化。
  • @juanchopanza:这仅适用于 C++03 而不是 C++11。检查我对标记重复项的回答(第二个标记重复项)
  • @Als 可能是因为现在是星期五晚上,但我已经读了又读了 9.4,但我就是没看到。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-16
  • 1970-01-01
  • 2012-06-25
  • 1970-01-01
相关资源
最近更新 更多