これがApple の LLVM Compiler 4.0 (XCode 4.4.1)でのみ発生するかどうかはわかりませんが、次の動作に気付きました。
NSUInteger currentIndex = 0;
NSUInteger sideSize = 2;
// Method A
for (NSInteger i = currentIndex-sideSize; i < currentIndex+sideSize; i++)
{
printf("In the loop\n"); // WON'T be executed
}
// Method B
for (NSInteger i = (NSInteger)(currentIndex-sideSize); i < currentIndex+sideSize; i++)
{
printf("In the loop\n"); // WON'T be executed
}
// Method C
for (NSInteger i = (NSInteger)(currentIndex-sideSize); i < (NSInteger)(currentIndex+sideSize); i++)
{
printf("In the loop\n"); // WILL be executed
}
// Method D
NSInteger initialIndex = currentIndex-sideSize;
NSInteger finalIndex = currentIndex+sideSize;
for (NSInteger i = initialIndex; i < finalIndex; i++)
{
printf("In the loop\n"); // WILL be executed
}
メソッド B とメソッド C は、加算演算子の結果を符号付きの値に明示的にキャストしていないことを除いて、ほとんど同じです。
誰が何が起こっているのか説明できますか?