Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.2k views
in Technique[技术] by (71.8m points)

objective c - "Initializer is not a compile time constant" error works in .mm?

I'm puzzled by a situation I'm observing and would love some insight. First, I'm using Xcode 5, with LLVM 5 compiler options set to defaults.

I have a line in a .m file such as:

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

And, as expected, I see a compiler error saying Initializer element is not a compile-time constant.

However, if I place this same line in a .mm (Objective C++) file, the compiler does not complain.

I completely understand why it shouldn't work, but I'm baffled as to why it appears to.

Thoughts?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

As you mentioned, in C and Objective-C static variables can only be initialised with compile-time constants. In C++ (and therefore Objective-C++) on the other hand, static variables are assigned at run time, before main runs.

For more details have a look at Eli Bendersky's Non-constant global initialization in C and C++


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...