我有一个跨平台库,仅在iPhone上且仅在发行版下才有奇怪的问题。
// .h
class cColor
{
public:
static const cColor Red;
static const cColor Green;
static const cColor Blue;
u8 r;
u8 g;
u8 b;
u8 a;
inline cColor(...) : ... { }
};
// .cpp
const cColor cColor::Red(0xFF, 0x00, 0x00);
const cColor cColor::Green(0x00, 0xFF, 0x00);
const cColor cColor::Blue(0x00, 0x00, 0xFF);
它看起来确实像是一个初始化顺序的惨败,但是问题不在于静态方法,而在于程序的后面。所有cColor::Red,Green,Blue都设置为0。实际上,我在构造函数的{}中放入了一些printf,虽然它不打印任何内容,但是由于在全局初始化期间,所以可能没问题。
现在最糟糕的部分是:该库也一直在Release中工作,直到最近才添加了一些功能(200-300行)甚至无法执行的Objective-C代码。仅仅通过减少代码大小,我就可以解决此问题,但这对我而言并不是真正的选择。而且应用程序不是那么大,内存不是问题。
Btw cColor包含在库中的预编译头文件中,以及稍后在使用该库的应用程序中。
救命!我真的没有主意。
编辑:这里是更多信息...
我只将初始化代码从库中移到了我的应用程序中,现在
常量已正确初始化。
我真的认为链接器弄乱了某些东西。
有任何想法吗?
最佳答案
您可以轻松防止静态初始化命令惨败:http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.15
// 。H
cColor类
{
上市:
静态const cColor&Red();
静态const cColor&Green();
静态const cColor&Blue();
u8 r;
u8 g;
u8 b;
u8 a;
内联cColor(...):... {}
};
// .cpp
const cColor&cColor::Red(){
静态cColor * redColor = new Color(0xFF,0x00,0x00);
返回* redColor;
};
/ *等* /
我不知道这是否对您的症状有帮助。
关于c++ - 静态const初始化iPhone/发布,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3222462/