分配空间问题!

chenlei1700 2005-05-23 10:12:26
数据成员和数据函数在类的头文件和类的内部实现的定义里是不是都不分配空间?
“类的头文件和类的内部实现的定义”的本质属于声明?
只有静态的才能在类的内部实现中分配空间?
...全文
104 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Zark 2005-05-24
  • 打赏
  • 举报
回复
楼主对类成员变量的理解是正确,对成员函数的理解是不对的.

无论是内联成员函数,正常成员函数还是在类内实现的函数都在编译中"分配空间",不过我们通常不称之为"分配空间",因为"分配空间"通常是指数据段来说的,代码段不存在这个问题.

对函数成员变量,如果它不是静态的,那么就只有等到它实例化的时候才分配空间.

例如:

class A
{
int i;
public:
void f() {printf("test");}
};

class B
{
int j;
public:
void g() {printf("again");}
};

void main()
{
A a;
a.f();
}

在本例中只A类的成员变量i有空间,B类的成员变量j是没有空间的.但是无论是函数f()还是g()都有真实的代码体(当然可能B类以及g()都被优化掉了).


nerrymeeting 2005-05-24
  • 打赏
  • 举报
回复
UP
zenny_chen 2005-05-23
  • 打赏
  • 举报
回复
怎么会不分配空间呢!?它们在编译时期就已经得到了其相应地址,存放在堆栈中,它们是在编译时期静态分配的。

而对于变量、函数的声明,编译器也会将这些符号存放在符号表中。如果只在头文件中声明,却没有在外部定义,编译器会发出警告,甚至是通不过编译。
zdy_8212 2005-05-23
  • 打赏
  • 举报
回复
编译时代码就不分配空间,但它会促使执行后的代码不随着改动,当然除非你定义的是static。而运行时的代码都需要分配空间的。
sankt 2005-05-23
  • 打赏
  • 举报
回复
up
zhangsong1238 2005-05-23
  • 打赏
  • 举报
回复
在头文件中是不会对数据分配空间的,相当于一个声明
qhfu 2005-05-23
  • 打赏
  • 举报
回复
不分配空间怎么行啊,这问题提的有意思,,,, 在类体中实现就是内联。

64,654

社区成员

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

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