我正在使用 Clang 的原始装箱功能将枚举成员打包到NSNumber
Clang 文档的Boxed Enums 部分对此表示编译器将枚举成员装箱为整数,除非指定了类型。
有趣的是,根据我将枚举成员传递给方法的方式,我得到不同大小的整数。我已经能够将案例隔离到以下代码
typedef enum _MyEnum {
MyEnumMember1 = 1000
} MyEnum;
- (void)testEnumerationBoxing
{
NSNumber *numberA = [self testA];
NSNumber *numberB = [self testB:MyEnumMember1];
CFNumberType numberTypeA = CFNumberGetType((__bridge CFNumberRef) numberA);
CFNumberType numberTypeB = CFNumberGetType((__bridge CFNumberRef) numberB);
NSLog(@"CF Number type for A: %lu; B: %lu", numberTypeA, numberTypeB);
}
- (NSNumber *)testA
{
return @(MyEnumMember1);
}
- (NSNumber *)testB:(MyEnum)enumMember
{
return @(enumMember);
}
控制台输出是
A 的 CF 编号类型:3;乙:4
(第一个是kCFNumberSInt32Type
,第二个是kCFNumberSInt64Type
)
如果我将声明更改为,typedef enum _MyEnum : int
我看到两者的结果相同:kCFNumberSInt32Type
.
为什么两种装箱方法的整数大小不同?