objective-c - "Initializer is not a compile time constant"错误在 .mm 中起作用?

标签 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++) 文件中,编译器不会报错。

我完全理解为什么它不应该起作用,但我对它为什么看起来起作用感到困惑。

想法?

最佳答案

正如您所提到的,在 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/

相关文章:

ios - 单例创建,在 ViewController 中使用时出错?

objective-c - 我是否需要将作为参数传入的 NSString 分配给自定义初始化方法?

ios - 为什么当应用程序状态为后台时,UIApplication 的 backgroundTimeRemaining 值是 DBL_MAX?

ios - 在后台运行声音并播放音乐

c++ - Apple 的 Using C++ with Objective-C 文章不见了...谁能给我一篇新文章,或者帮我找到旧文章?

ios - 使用 CvVideoCamera 拍照

objective-c - `NSString` 方法调用后 xCode 上 `stringByReplacingCharactersInRange` 末尾的垃圾

objective-c - 不同的 C++ include 语句在 Objective-C header 中抛出错误

objective-c - .mm 文件上的 NSLog

objective-c - Class 类在哪里声明/如何转发声明它?