Я знаю, что в C и С++ при передаче bools в ints (int)true == 1
и (int)false == 0
. Мне интересно, кастинг в обратном направлении...
В приведенном ниже коде все следующие утверждения сохраняются для меня в файлах .c, скомпилированных с Visual Studio 2013 и Keil μVision 5. Обратите внимание на (bool)2 == true
.
Что говорят стандарты C и С++ о том, чтобы отличать ненулевые целые числа, отличные от нуля, для bools? Указано ли это поведение? Пожалуйста, включите цитаты.
#include <stdbool.h>
#include <assert.h>
void TestBoolCast(void)
{
int i0 = 0, i1 = 1, i2 = 2;
assert((bool)i0 == false);
assert((bool)i1 == true);
assert((bool)i2 == true);
assert(!!i0 == false);
assert(!!i1 == true);
assert(!!i2 == true);
}
Не дубликат Можно ли считать (bool) true == (int) 1 для любого компилятора С++?:
- Литье в обратном направлении (int → bool).
- Нет обсуждения ненулевых значений, отличных от одного.