4

我对我正在观察的情况感到困惑,并希望得到一些见解。首先,我使用 Xcode 5,将 LLVM 5 编译器选项设置为默认值。

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

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

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

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

我完全理解为什么它不应该工作,但我对它为什么会出现感到困惑。

想法?

4

1 回答 1

7

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

有关更多详细信息,请查看 Eli Bendersky在 C 和 C++ 中的非常量全局初始化

于 2013-07-25T23:49:04.720 回答