Здравствуйте, Андрей Тарасевич, Вы писали:
АТ>Здравствуйте, Nikita G, Вы писали:
NG>>Объясните каким правилом разруливается ситуация сравнения знаковых/беззнаковых целых в следующем примере:
АТ>Сравнения знакового и беззнакового делается как беззнаковое. Т.е. знаковое значение приводится к беззнаковому типу.
NG>> int i = -1;
NG>> unsigned int ui = 10;
NG>> if (i < ui)
NG>> {
NG>> std::cout << "WOW" << std::endl;
NG>> }
NG>> else
NG>> {
NG>> std::cout << "BAD" << std::endl;
NG>> }
NG>>На VC6 SP4 сравнение в данном примере всегда беззнаковое, и результат сравнения всегда false
АТ>Разумеется, false. '-1' после приведения к 'unsigned int' в VC6 — это 4294967295, что больше, чем 10.
А если вспомнить, что стандарт явно определяет способ такой конверсии как приведение по модулю, то на любой "стандартной" платформе должно получится максимальное значение, представимое в unsigned int, соответсвенно, всегда будет false.
... << RSDN@Home 1.1.0 stable >>