gpt4 book ai didi

c++ - 静态常量初始化 iPhone/Release

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:36:32 26 4
gpt4 key购买 nike

我有一个跨平台库,它只在 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,它不打印任何东西,但也许它是 OK,因为它是在全局初始化期间。

现在最糟糕的部分是:直到最近,在我添加一些甚至没有执行的函数(200-300 行)Objective-C 代码之前,该库还在 Release 中运行。只需减少代码大小,我就可以解决这个问题,但这对我来说并不是真正的选择。应用程序也不是那么大,内存不是问题。

顺便说一句,cColor 包含在库的预编译头文件中,随后包含在使用该库的应用程序中。

帮助!我真的没主意了。


已编辑:这里有更多信息...

我只将初始化代码从库中移到了我的应用程序中,现在常量正确初始化。

我真的认为链接器搞砸了。

有什么想法吗?

最佳答案

您可以轻松防止静态初始化顺序失败:http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.15

// .hclass cColor {public:   static const cColor& Red();   static const cColor& Green();   static const cColor& Blue();   u8 r;   u8 g;   u8 b;   u8 a;   inline cColor(...) : ... { }};// .cppconst cColor& cColor::Red() {   static cColor* redColor = new Color(0xFF, 0x00, 0x00);   return *redColor;};/* etc */

不过我不知道它是否对您的症状有帮助。

关于c++ - 静态常量初始化 iPhone/Release,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3222462/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com