ios_base和静态成员

时间:2011-04-23 06:27:12

标签: c++ static-members

ios_base类中的静态常量在创建时被初始化,这对于常量是有意义的。可以用相同的方式初始化非常量静态成员变量,或者这个概念只允许用于常量静态成员吗​​?

对于具有gnu编译器的非常量静态成员,必须始终使用始终定义/分配空间与标题中的减速度分开?以这种方式初始化常量静态成员是否合适?

2 个答案:

答案 0 :(得分:3)

只能为当前C ++标准中的static const(整数数据类型,如int, char, double等)成员创建和初始化类成员。对于非静态成员,这是不可能的。但是,在C ++ 0x中引入了这个工具。

编辑:对于非const静态成员,您可以进行初始化,但必须在.cpp文件中执行相同操作(对于非模板类)。 e.g。

struct A
{
  static const int i = 0; // ok
  static int j;  // can declare in .cpp file as below
  int k = 2; // error, but valid in C++0x
  const int l = 3; // error, valid in C++0x
  static const int m[2] = {1,2}; // error, should be an integral type
  static const string n = "hi"; // error, should be an integral type
};
int A::j = 1  // declare in class body, and define outside

答案 1 :(得分:1)

  

因为静态数据成员必须是   明确定义了一个   编译单位。

来自C ++ FAQ http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.12

您可能希望阅读有关“静态数据成员”的整个“构造函数”部分,以便清楚地理解它。 http://www.parashift.com/c++-faq-lite/ctors.html