【问题标题】:Initializer element is not a compile-time constant - Referring a const block from a const structInitializer element is not a compile-time constant - 从 const 结构中引用 const 块
【发布时间】:2013-04-17 17:13:15
【问题描述】:

环境

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

产生一个

错误:初始化元素不是编译时常量 NMFooStruct const NMFooStructConst = { .fooBlock = NMFooBlockConst };

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

【问题讨论】:

  • 肯定是 1. 不是“联系人”而是常数,2. 这与 Xcode 无关。

标签: objective-c xcode struct constants clang


【解决方案1】:

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

但是,这将起作用:

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

【讨论】:

    【解决方案2】:

    This answer came from mikeash.

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

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

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

    关键字 const 无关。

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

    感谢迈克。

    【讨论】:

      猜你喜欢
      • 2022-12-07
      • 1970-01-01
      • 2017-02-20
      • 2020-09-21
      • 1970-01-01
      • 2016-12-23
      • 2022-08-20
      • 1970-01-01
      • 2020-10-30
      相关资源
      最近更新 更多