Initializer元素不是编译时常量-引用常量结构中的常量块



环境

XCode 4.6.2
OSX 10.7.5

NMFoo.h

typedef void(^NMFooBlock)();
struct NMFooStruct {
    __unsafe_unretained NMFooBlock fooBlock;
};
typedef struct NMFooStruct NMFooStruct;
@interface NMFoo : NSObject
@end

NMFoo.m

#import "NMFoo.h"
NMFooBlock const NMFooBlockConst = ^{};
NMFooStruct const NMFooStructConst = { .fooBlock = NMFooBlockConst };
@implementation NMFoo
@end

产生

错误:初始值设定项元素不是编译时常量NMFooStructconst NMFooStructConst={.fooBlock=NMFooBlockConst};

即使NMFooBlockConst被定义为const,这也是预期的行为吗?

我认为答案就在这里:https://stackoverflow.com/a/6143271/73479

然而,这将起作用:

NMFooStruct const NMFooStructConst = { .fooBlock = ^{} };
这个答案来自mikeash。

"NMFooBlockConst"不是编译时常量表达式,因此不允许使用。

即使表达式^{}是编译时常数,"NMFooBlockConst"也不符合语言定义。

根据定义,变量不是编译时间常数表达式^{}是.

关键字const不相关。

const关键字与某个内容是否为编译时常量表达式无关。

感谢迈克。

最新更新