xCode 4.6 を使用して、このバグを再現することしかできませんでした。Xcode 4.5を使用すると、すべてが期待どおりに機能します
問題は、myVal が -1 の int val を表す正しいビット構造を持っていることです。ただし、unsigned int で表した場合、同じビット構造の値である 4294967295 の値を示しています。myVal を int にキャストすると、正しい値が表示されることに気付くでしょう。列挙型は int である必要があるため、これは奇妙です。
これは、メインの最後にあるデバッガーのすべての変数の値を示すスクリーン ショットです。http://cl.ly/image/190s0a1P1b1t
typedef enum : int {
BTEnumValueNegOne = -1,
BTEnumValueZero = 0,
BTEnumValueOne = 1,
}BTEnumValue;
int main(int argc, const char * argv[])
{
@autoreleasepool {
//on this line of code myVal is 0
BTEnumValue myVal = BTEnumValueZero;
//we are adding -1 to the value of zero
myVal += BTEnumValueNegOne;
//at this moment myVal has the exact bit stucture
//of a signed int at -1, but it is displaying it
//as a unsigned int, so its value is 4294967295
//however, if i cast the enum (which should already
//be an int with a signing) to an int, it displays
//the correct value of -1
int myIntVal = (int)myVal;
}
return 0;
}