good in

Knuthocean 2004-09-04 11:29:31
请说说这种声明怎么理解?
class X{
static X a;
int i;
//...
public:
//...
}

这儿的嵌套定义如何使用,又是如何分配内存的?
...全文
114 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Knuthocean 2004-09-06
  • 打赏
  • 举报
回复
To Andy84920(你也不懂)
你的那个
ma.operator = ( [offset A::a] );//伪代码形式啦
是什么意思呀?
Andy84920 2004-09-04
  • 打赏
  • 举报
回复
请说说这种声明怎么理解?
class X{
static X a;
int i;
//...
public:
//...
}

这儿的嵌套定义如何使用,又是如何分配内存的?

//嵌套定义?何谓嵌套定义?static X a;只是一个声明而矣,所以你可以在一个类未定义完全时声明一个该类的类型如果你写成X a;那就不行了.因为这是一个定义,并没有分配内存(在定义的时候)
///为a分配内存是在程序启动时.所以你需要在其它的地方用 X X::a来定义一下.
nicknide 2004-09-04
  • 打赏
  • 举报
回复
A A::a;

int
main()
{
A ma;
}

内存分析:
全局读写内存区:A::a 四个字节:i
栈空间 A ma 四个字节,ma.i;
其实他们中间根本就没有那个static A::a,编译器看到如下的调用的时候:
ma = A::a的时候,就将其解析为如下方式:
ma.operator = ( [offset A::a] );//伪代码形式啦
只是引用了全局的一个地址上的一个对象而已
whyglinux 2004-09-04
  • 打赏
  • 举报
回复
>> 以后,任何一个 X 的对象都可以访问它。

说错了。因为是私有的,只能在类域内访问。
whyglinux 2004-09-04
  • 打赏
  • 举报
回复
static X a; 是 声明 了一个静态数据成员 a 的存在,而不是定义。它的定义要写在列的外面,先于这个类的对象的出现。比如可做如下定义:

X X::a;

以后,任何一个 X 的对象都可以访问它。
pacman2000 2004-09-04
  • 打赏
  • 举报
回复
a是static的,所以所有的class X都共用一份a
北极猩猩 2004-09-04
  • 打赏
  • 举报
回复
此贴标题意义不明,下次请在标题中写清问题的大致方向或描述

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧