2011-04-23 72 views
1

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

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

+0

+1为冷静的名字。为了简单回答这个问题,定义/分配总是需要的,但是如果你省略了整数的定义(例如'int','short','long','enum'等等),编译器会自动为你做这些事情。不变。 – Potatoswatter 2011-04-23 06:37:58

回答

3

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

编辑:对于非const静态成员,你可以做初始化,但你必须做在.cpp文件相同(非模板类)。例如

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 
+0

我的意思是,对于非常量静态成员,你是否也可以这样做,以及整数数据类型是什么意思:-) – rubixibuc 2011-04-23 06:35:28

+0

我编辑了我的答案。希望能回答你的问题。 – iammilind 2011-04-23 06:44:05

+0

谢谢:-)没有回答我的问题 – rubixibuc 2011-04-23 06:51:37

1

因为静态数据成员必须在 恰好一个 编译单元明确定义。

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

你可能想了解“静态数据成员”要了解清楚它的整个“构造函数”一节。 http://www.parashift.com/c++-faq-lite/ctors.html

+0

非常有用的源码:-),但标准头文件(如ios_base)如何定义常量静态记忆体,但是在一个编译单元中没有定义? – rubixibuc 2011-04-23 06:43:53