c++ 静态成员初始问题

chenfuxing123 2012-06-19 05:21:15

#include <iostream>
using namespace std;
class t
{
public:
t(){cout<<"t"<<endl;}
void send(){cout<<"send"<<endl;}
};
class A
{
public:
A(){tt.send();}
static t tt;
};
A a;
t A::tt;
void main()
{

}





为什么会出到
send
t
的输出结果 不解
...全文
121 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
pathuang68 2012-06-19
  • 打赏
  • 举报
回复
chenfuxing123 2012-06-19
  • 打赏
  • 举报
回复
Corner514
给个QQ 聊
本人QQ76722156
Corner 2012-06-19
  • 打赏
  • 举报
回复
普通的成员函数在对象的变量中并没有地址,也就是说tt里边并没有send函数的地址……变量寻找普通成员函数地址的具体方法不太清楚,但是这肯定是根据类去查找,和变量无关。
chenfuxing123 2012-06-19
  • 打赏
  • 举报
回复
尽管t 中的send方法 在 A a;已经有内存空间,但A中的tt没有啊。tt怎么能指向send这个空间地址呢?
Corner 2012-06-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
corner514 能不能介绍这方面的书么 我看c++primer 里面没有讲到
[/Quote]
额,这个我感觉应该看看汇编,这样自己就会更加注意内存的分配,平时可能就会注意去想C++里很多东西究竟是怎么实现的。
chenfuxing123 2012-06-19
  • 打赏
  • 举报
回复
corner514 能不能介绍这方面的书么 我看c++primer 里面没有讲到
chenfuxing123 2012-06-19
  • 打赏
  • 举报
回复
谢谢 corner514
星星x 2012-06-19
  • 打赏
  • 举报
回复
3 楼 +1
Corner 2012-06-19
  • 打赏
  • 举报
回复
全局变量内存分配和初始化时机问题,内存分配在链接时已经完成,初始化需要代码执行到变量定义处执行。
所以在A a;处tt的内存已经分配,所以可以执行tt.send();但是其构造函数要到t A::tt;处执行。
酱油党 2012-06-19
  • 打赏
  • 举报
回复
顶楼上!~
pengzhixi 2012-06-19
  • 打赏
  • 举报
回复
你这里有一个隐秘的问题 就是全局变量和静态变量的初始化顺序的问题。A类里面包含了静态成员tt那么正常来说tt的初始化应该是在全局变量a的前面 所以你这里的
A a;
t A::tt;
顺序要交换下

64,634

社区成员

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

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