Рассмотрим следующее:
#include <iostream>
int main() {
unsigned int x = 3;
unsigned int y = 5;
std::cout << "a: " << x - y << std::endl;
std::cout << "b: " << ((int)x) - y << std::endl;
std::cout << "c: " << x - ((int)y) << std::endl;
std::cout << "d: " << ((int)x) - ((int)y) << std::endl;
}
$ g++ -Wconversion -Wall uint_stackoverflow.cc -o uint_stackoverflow && ./uint_stackoverflow
a: 4294967294
b: 4294967294
c: 4294967294
d: -2
Я понимаю, почему "а" не дает ожидаемого результата. Но почему "b" и "c" терпят неудачу. Для "b" я подумал, что после нажатия "x" на "int" результат будет снова "int".
Не могли бы вы просветить меня?
edit: Не следует ли предупреждать компилятор? g++ (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5
Спасибо,
Кто-нибудь