“初始化程序不是编译时常量”错误在.mm中有效吗?

时间:2013-07-25 23:33:35

标签: objective-c objective-c++

我对我正在观察的情况感到困惑,并且会喜欢一些洞察力。首先,我使用Xcode 5,将LLVM 5编译器选项设置为默认值。

我在.m文件中有一行,例如:

static NSArray * const kSchemaVersions = @[@"1"];

并且,正如预期的那样,我看到编译器错误Initializer element is not a compile-time constant.

但是,如果我将同一行放在.mm(Objective C ++)文件中,编译器就不会抱怨。

我完全理解为什么它不起作用,但我很困惑为什么它会出现。

思想?

1 个答案:

答案 0 :(得分:7)

正如您所提到的,在C和Objective-C中,静态变量只能使用编译时常量进行初始化。另一方面,在C ++(以及Objective-C ++)中,静态变量在运行时分配,在main运行之前。

有关详细信息,请查看Eli Bendersky的Non-constant global initialization in C and C++