关于static的问题
关于static刚看了C++ Primer中的描述,举例如下,
class::Bar{
//.....
private:
static Bar mem1;//ok
Bar * mem2;//ok
Bar mem3; //error
};
我的理解是对于静态的定义,是不是在编译的时候不分配空间,在运行时在分配内存空间;而指针变量定义成功,是因为指针分配空间已知,而一般数据变量则不能这么定义。请高手能帮我弄弄明白,有点晕乎。.......
问题点数:20、回复次数:1Top
1 楼UPCC(杂食动物)回复于 2006-07-02 22:31:46 得分 20
我的理解是对于静态的定义,是不是在编译的时候不分配空间,在运行时在分配内存空间
---------------------------------------------------
static Bar mem1;//ok
不是不分配,而是因为静态数据和实例数据在分配方式和访问上是不同的,静态成员是共享的,他的大小
静态数据成员的一些独特方式的使用:(1)静态数据成员的类型可以是其所属类,而非static的数据成员只能声明为类对象的指针或者引用
(2)静态数据成员可以被作为类成员函数的缺省实参,而非static成员不能。
而指针变量定义成功,是因为指针分配空间已知,而一般数据变量则不能这么定义
-----------------------------------
Bar * mem2;//ok
那是因为什么指针都是地址线宽度,编译起不用预早知道类型的大小。
我们知道可以声明数据成员为类的指针和引用,因为它们的大小不依赖于所指的对象,是固定的
Bar mem3; //error
-----------------------------
在自己本身里面定义自己,那自己又定义自己,自己又定义自己,那这个内参到底是多大呢?谁都不知道,所以编译不了。Top




