Re[2]: C++/C bool != true и false
От: Jukier  
Дата: 27.06.14 04:21
Оценка:
Здравствуйте, watchmaker, Вы писали:

W>Здравствуйте, Jukier, Вы писали:


J>>Есть два вопроса:

J>>1. Какое поведение должно быть по стандарту,
W>По стандарту тут UB:

A function pointer can be explicitly converted to a function pointer of a different type. The effect of calling
W>a function through a pointer to a function type (8.3.5) that is not the same as the type used in the definition
W>of the function is undefined.


Спасибо за указание места, где это определено.

W>Я понимаю, что сама задача определить как компилятор представляет тип bool на низком уровне может быть занятной. Но ты делаешь это неправильно, а твой код ломается раньше.


В Microsoft VS 2005 bool занимает 1 байт: true == 1, false == 0. А в этом примере b == 4 (и там, как я помню, для захода в else функция g() не была нужна). Меня удивило, что в gcc (g++) есть разница между сравнением с true и false напрямую и через функцию.

J>>2. Какое поведение в других компиляторах/версиях?


W>Всё то же UB.


Если есть под рукой последняя Microsoft Visual Studio (или более поздняя, чем 2005), то буду благодарен, если посмотрите, как работает там приведенный кусок кода с явным сравнением с true и false.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.