编译工程的时候发现包含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无法在编译阶段使用吗?这应该和内存分配有关.编译器如何处理编译阶段静态变量的堆分配请求呢? |