(阿南)STL不能在编译阶段使用?

[复制链接]
2384|6
 楼主| twicave 发表于 2008-12-17 10:09 | 显示全部楼层 |阅读模式
编译工程的时候发现包含stl的部分无法正常运行.<br /><br />很简单的写了一段测试代码在main函数中执行却是正确的,如下:<br />list&ltint,&nbsp;allocator&ltint&gt&nbsp;&gtl;<br />l.push_back(10);<br />l.push_back(11);<br /><br />int&nbsp;i&nbsp;=&nbsp;l.front();<br />if(i)&nbsp;i.push_back(12);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//防止被编译器优化掉前一句代码.<br />else&nbsp;i.push_back(13);<br /><br />l.pop_front();<br /><br />int&nbsp;i&nbsp;=&nbsp;l.front();<br />if(i)&nbsp;i.push_back(12);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//防止被编译器优化掉前一句代码.<br />else&nbsp;i.push_back(13);<br /><br />以上代码执行毫无问题.<br /><br />接下来,定义了一个包装类,和一个静态变量:<br />class&nbsp;TFake<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;public:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list&ltint,&nbsp;allocator&ltint&gt&nbsp;&gt&nbsp;l;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TFake()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l.push_back(10);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l.push_back(11);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />};<br /><br />TFake&nbsp;f;<br /><br />然后对f进行操作.发现无法通过了<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i&nbsp;=&nbsp;f.l.front();<br />&nbsp;&nbsp;&nbsp;&nbsp;if(i)&nbsp;f.l.push_back(12);&nbsp;舑<br />&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;f.l.push_back(13);&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;f.l.pop_front();&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;=&nbsp;f.l.front();&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(i)&nbsp;f.l.push_back(12);&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;f.l.push_back(13);<br /><br /><br /><br />难道stl无法在编译阶段使用吗?这应该和内存分配有关.编译器如何处理编译阶段静态变量的堆分配请求呢?
阿南 发表于 2008-12-17 23:47 | 显示全部楼层

STL不了解,呵呵

  
 楼主| twicave 发表于 2008-12-18 15:14 | 显示全部楼层

其实不是STL的问题,

问题是编译器如何处理编译阶段的堆分配.<br /><br /><br />比如定义了一个类,<br />构造函数中对实例进行了初始化,<br />如果你声明了静态变量(该类的实例)<br />ads1.2&nbsp;不会对这个静态对象执行构造函数中的初始化工作.<br /><br />谁有RealView可以帮忙测试一下。realview是否改正了这个bug.<br /><br />附上一个很简单的测试代码:<br />class&nbsp;A<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;public:<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;a;<br />&nbsp;&nbsp;&nbsp;&nbsp;A()&nbsp;{a&nbsp;=&nbsp;10;}<br />};<br /><br />A&nbsp;sa;<br />extern&nbsp;&quot;C&quot;&nbsp;void&nbsp;Main(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;if(sa.a)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sa.a&nbsp;=&nbsp;12;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sa.a&nbsp;=&nbsp;13;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}
philofly 发表于 2008-12-18 15:42 | 显示全部楼层

静态变量初始化呢?

程序有问题,跟编译器无关
 楼主| twicave 发表于 2008-12-18 15:51 | 显示全部楼层

代码问题?没看出来啊?

上面就10几行代码,我又看了一遍,没有发现问题啊.
dld2 发表于 2008-12-18 16:03 | 显示全部楼层

自己去读编译器手册吧

这里用C++的不多。
air11 发表于 2008-12-18 16:36 | 显示全部楼层

C++不会,看热闹

c++完全不会。。。看热闹来了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

44

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部