求教:为什么类的静态数据成员要在类体外再声明一次,而静态成员函数不用呢?

letok 2003-08-25 11:36:16
静态成员函数和静态数据成员都是静态的,静态数据成员要在类体外再
声明一次,好像是这时候编译器才给静态数据成员分配内存,但静态成员函数就
不需要呢??
...全文
248 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
programhunter 2004-02-13
  • 打赏
  • 举报
回复
问题复杂,不好回答,建议自行参考
《C++程序设计语言》
wangyangcheng 2004-02-12
  • 打赏
  • 举报
回复
I want to know too!`
letok 2003-08-26
  • 打赏
  • 举报
回复
up
xueweizhong 2003-08-25
  • 打赏
  • 举报
回复
因为你说的这种情况下
静态成员函数是 inline的。
关于inline函数如果编译器决定

1:可以inline,那么这个函数就相当于类型安全的宏,
所以只是一种inline替换而已,在编译阶段它就完成了它的使命。
所以不需要额外的声明和定义。

2:如果编译器发现这个函数不能inline,那么这种情况就要稍微复杂一些:
最简单的结果是导致每个包含它的translation-unit都包含一份该函数定义。
为了不违反ONE-DEFINE-RULE, 象gcc的话,采取了一种vague-link的技术。
具体可去它们的网站看一下。
这一部分有点象模板的连接技术实现。

关于非模板类的成员变量,要另外定义一下,是因为它在C++很早就有,需要一种简单
的处理方式: 给它指定一个translation-unit(or cpp)来让编译器给它开辟空间。

我想你知道这些就够了。
一般化之后,事情会变得更复杂。而且并不是每件事情都有道理可讲。
这时我宁愿把这些东西认为是“C++规则”,记住就行了。
letok 2003-08-25
  • 打赏
  • 举报
回复
系统是不是在“这个初始化”时,才给静态数据成员分配内存呢?
为什么静态函数成员在类声明时就分配内存了呢?
idontlikenickname 2003-08-25
  • 打赏
  • 举报
回复


静态数据成员再类定义之外不叫声明,应该是定义并初始化~

letok 2003-08-25
  • 打赏
  • 举报
回复
一般化之后,事情会变得更复杂。而且并不是每件事情都有道理可讲。
这时我宁愿把这些东西认为是“C++规则”,记住就行了。

很有道理,我也知道C++有很多东西都是这样,要弄个水落石出也很麻烦,初学者不需要,但还是忍不住要问问。



我还是有点不明白,是因为inline函数,就分配内存空间了吗???


64,642

社区成员

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

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