环境
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 = ^{} };
"NMFooBlockConst"不是编译时常量表达式,因此不允许使用。
即使表达式^{}是编译时常数,"NMFooBlockConst"也不符合语言定义。
根据定义,变量不是编译时间常数表达式^{}是.
关键字const不相关。
const关键字与某个内容是否为编译时常量表达式无关。
感谢迈克。