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

时间:2013-04-17 17:13:16

标签: objective-c xcode struct const clang

环境

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?

,这是预期的行为吗?

2 个答案:

答案 0 :(得分:1)

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

然而,这将有效:

NMFooStruct const NMFooStructConst = { .fooBlock = ^{} };

答案 1 :(得分:1)

This answer came from mikeash.

  

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

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

  

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

关键字const不相关。

  

const关键字与某些东西是否是编译时常量表达式无关。

赞赏迈克。