我对我观察到的情况感到困惑,希望获得一些见解。首先,我使用的是 Xcode 5,LLVM 5 编译器选项设置为默认值。
我在 .m 文件中有一行,例如:
static NSArray * const kSchemaVersions = @[@"1"];
而且,正如预期的那样,我看到一个编译器错误,提示 Initializer element is not a compile-time constant.
但是,如果我将同一行放在.mm
(Objective C++) 文件中,编译器不会报错。
我完全理解为什么它不应该起作用,但我对它为什么看起来起作用感到困惑。
想法?
最佳答案
正如您所提到的,在 C 和 Objective-C 中,静态变量只能使用编译时常量进行初始化。另一方面,在 C++(以及 Objective-C++)中,静态变量在运行时分配,在 main
运行之前。
有关详细信息,请查看 Eli Bendersky 的 Non-constant global initialization in C and C++
关于objective-c - "Initializer is not a compile time constant"错误在 .mm 中起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17870520/