环境
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
产生一个
错误:initializer元素不是编译时常量NMFooStruct const NMFooStructConst = {。fooBlock = NMFooBlockConst};
即使将NMFooBlockConst定义为const?
,这是预期的行为吗?答案 0 :(得分:1)
答案就在这里,我想:https://stackoverflow.com/a/6143271/73479
然而,这将有效:
NMFooStruct const NMFooStructConst = { .fooBlock = ^{} };
答案 1 :(得分:1)
This answer came from mikeash.
'NMFooBlockConst'不是编译时常量表达式,因此不允许使用。
即使表达式^ {}是编译时常量,'NMFooBlockConst'也不符合语言定义。
根据定义,变量不是编译时常量表达式。 ^ {}是。
关键字const不相关。
const关键字与某些东西是否是编译时常量表达式无关。
赞赏迈克。