打印

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

[复制链接]
1663|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
twicave|  楼主 | 2008-12-17 10:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
编译工程的时候发现包含stl的部分无法正常运行.

很简单的写了一段测试代码在main函数中执行却是正确的,如下:
list<int, allocator<int> >l;
l.push_back(10);
l.push_back(11);

int i = l.front();
if(i) i.push_back(12);       //防止被编译器优化掉前一句代码.
else i.push_back(13);

l.pop_front();

int i = l.front();
if(i) i.push_back(12);       //防止被编译器优化掉前一句代码.
else i.push_back(13);

以上代码执行毫无问题.

接下来,定义了一个包装类,和一个静态变量:
class TFake
{
    public:
        list<int, allocator<int> > l;
        TFake()
        {
            l.push_back(10);
            l.push_back(11);
        }
};

TFake f;

然后对f进行操作.发现无法通过了

    int i = f.l.front();
    if(i) f.l.push_back(12); 舑
    else f.l.push_back(13);   
       
    f.l.pop_front();   
    i = f.l.front();   
    if(i) f.l.push_back(12);   
    else f.l.push_back(13);



难道stl无法在编译阶段使用吗?这应该和内存分配有关.编译器如何处理编译阶段静态变量的堆分配请求呢?

相关帖子

沙发
阿南| | 2008-12-17 23:47 | 只看该作者

STL不了解,呵呵

使用特权

评论回复
板凳
twicave|  楼主 | 2008-12-18 15:14 | 只看该作者

其实不是STL的问题,

问题是编译器如何处理编译阶段的堆分配.


比如定义了一个类,
构造函数中对实例进行了初始化,
如果你声明了静态变量(该类的实例)
ads1.2 不会对这个静态对象执行构造函数中的初始化工作.

谁有RealView可以帮忙测试一下。realview是否改正了这个bug.

附上一个很简单的测试代码:
class A
{
    public:
    int  a;
    A() {a = 10;}
};

A sa;
extern "C" void Main(void)
{
    if(sa.a)
    {
        sa.a = 12;
    }
    else
    {
        sa.a = 13;
    }
}

使用特权

评论回复
地板
philofly| | 2008-12-18 15:42 | 只看该作者

静态变量初始化呢?

程序有问题,跟编译器无关

使用特权

评论回复
5
twicave|  楼主 | 2008-12-18 15:51 | 只看该作者

代码问题?没看出来啊?

上面就10几行代码,我又看了一遍,没有发现问题啊.

使用特权

评论回复
6
dld2| | 2008-12-18 16:03 | 只看该作者

自己去读编译器手册吧

这里用C++的不多。

使用特权

评论回复
7
air11| | 2008-12-18 16:36 | 只看该作者

C++不会,看热闹

c++完全不会。。。看热闹来了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

44

帖子

0

粉丝