Re[10]: Откуда берутся true и false?
От: CreatorCray  
Дата: 18.08.06 05:58
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:

RO>любой тип можно спокойно сравнивать с false, на то он и false.

true
RO>любой тип нельзя (не рекомендуется) сравнивать с true — надеюсь, тоже понятно.
false
bool можно сравнивать с true

А>так в чем проблема-то? че не ясно?

проблема в том, что г-н Roman Odaisky хочет продвинуть в массы свою идею о том, что с true нельзя сравнивать вообще ничего, даже bool
Риторический вопрос: зачем ему это надо? и почему он так упорствует в том что запись типа (<bool value> == true) — некорректна
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[11]: Откуда берутся true и false?
От: Roman Odaisky Украина  
Дата: 18.08.06 07:58
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>запись типа (<bool value> == true)


риторический вопрос: а зачем так?

Потом другой программер поменяет вызов bool myHandmadeTest(...) на int someOutoftheboxApiFunctionThatSeeminglyDoesTheSame(...). В лучшем случае получим ворнинг, в худшем — 1000 ворнингов. Или кто-то поменяет true на TRUE, тогда (еще хуже) их вообще не будет.

P. S. Вот передо мной проект на 0,4 MLOC. Запустил поиск по /[=!]=\s*<true>/i. Найдено 1 (одно) совпадение в своем коде (ай-ай-ай... теперь уже ни одного) + 7 в сторонних библиотеках. Аналогичный поиск по false дает 29 совпадений (17 + 12). Какой вообще смысл явно сравнивать с логическими константами?
До последнего не верил в пирамиду Лебедева.
Re[11]: Откуда берутся true и false?
От: kaa_t Россия  
Дата: 18.08.06 08:45
Оценка: 1 (1)
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, Roman Odaisky, Вы писали:


А>>так в чем проблема-то? че не ясно?

CC>проблема в том, что г-н Roman Odaisky хочет продвинуть в массы свою идею о том, что с true нельзя сравнивать вообще ничего, даже bool
CC>Риторический вопрос: зачем ему это надо? и почему он так упорствует в том что запись типа (<bool value> == true) — некорректна

Сравнивать c true или false это выбор индивидуальный. Никто не запрещает использовать конструкцию (<bool value> == true).
Здесь есть небольшая тонкость. С++ наследник языка С, к тому же тип bool появился в языке не сразу. В языке С было принято
что: значение равное нулю — ложь, значение не равное нулю — истина. true же константа равная 1 (одно значение из множества)
Запрет на сравнение c true своего рода правило хорошего программирования, оно снижает вероятность появления ошибки.
Re[9]: Откуда берутся true и false?
От: Roman Odaisky Украина  
Дата: 18.08.06 09:00
Оценка:
Здравствуйте, CreatorCray, Вы писали:

RO>>В <locale> определен такой isalnum, как ты сказал. Заметь, второй параметр не имеет дефолтного значения. А как же, по-твоему, пишут В <cctype> определен int isalnum(int) ...the same as the Standard C library headers <ctype.h>... (21.4).


CC>...который не находится в namespace std. Соответственно к std::isalnum не имеет никакого отношения.

CC>Дальнейшее написанное от этого теряет всякий смысл.

RTFM

Except as noted in clauses 18 through 27, the contents of each header cname shall be the same as that of the corresponding header name.h, as specified in ISO/IEC 9899:1990 Programming Languages C (Clause 7), or ISO/IEC:1990 Programming Languages—C AMENDMENT 1: C Integrity, (Clause 7), as appropriate, as if by inclusion. In the C++ Standard Library, however, the declarations and definitions (except for names which are defined as macros in C) are within namespace scope (3.3.5) of the namespace std.


160) The ".h" headers dump all their names into the global namespace, whereas the newer forms keep their names in namespace std. Therefore, the newer forms are the preferred forms for all uses except for C++ programs which are intended to be strictly compatible with C.

До последнего не верил в пирамиду Лебедева.
Re[12]: Откуда берутся true и false?
От: CreatorCray  
Дата: 18.08.06 09:16
Оценка: 1 (1)
Здравствуйте, Roman Odaisky, Вы писали:

RO>риторический вопрос: а зачем так?


RO>Потом другой программер поменяет вызов bool myHandmadeTest(...) на int someOutoftheboxApiFunctionThatSeeminglyDoesTheSame(...). В лучшем случае получим ворнинг, в худшем — 1000 ворнингов. Или кто-то поменяет true на TRUE, тогда (еще хуже) их вообще не будет.


RO>P. S. Вот передо мной проект на 0,4 MLOC. Запустил поиск по /[=!]=\s*<true>/i. Найдено 1 (одно) совпадение в своем коде (ай-ай-ай... теперь уже ни одного) + 7 в сторонних библиотеках. Аналогичный поиск по false дает 29 совпадений (17 + 12). Какой вообще смысл явно сравнивать с логическими константами?


Вопрос не в этом. Я тоже никогда не пишу ... == true
Но так упорно утверждать что "Низзя сравнивать с true!!!" я не стану.
А также утверждать что надо писать так-то и так-то потому что "это снижает вероятность ошибки" — пардон, это по мне так паранойя
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[10]: Откуда берутся true и false?
От: CreatorCray  
Дата: 18.08.06 09:27
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:

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


RO>>>В <locale> определен такой isalnum, как ты сказал. Заметь, второй параметр не имеет дефолтного значения. А как же, по-твоему, пишут В <cctype> определен int isalnum(int) ...the same as the Standard C library headers <ctype.h>... (21.4).

RO>RTFM
Ок. Убедил. Для <cctype> — верно.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[11]: Откуда берутся true и false?
От: omka Украина  
Дата: 28.08.06 08:33
Оценка: 10 (1)
Так на чем остановились-то?
С чем сравнивать bool-переменные или возвращаемые значения функций? С целыми константами?
или может создавать
enum { FALSE, TRUE };

?
не использовать никогда bool? почему? я не вижу причины, почему нельзя сравнить два булевских операнда — нет приведения ни к int, ни к чему другому...кто-то потом может поменять мой вызов bool isConditionTrue(); на int isAnotherConditionTrue();?
Так пусть перед этим посмотрит мой код — раз проследить за сравниваемыми значениями и все — пусть меняет все конструкции типа
bool isConditionTrue( SomeType& arg );
...
if ( true != isConditionTrue( MyArg ) )
...

на
int isAnotherConditionTrue( SomeType& arg );
const int NewProgrammersConstantValue = ...;
...
if ( NewProgrammersConstantValue != isAnotherConditionTrue( MyArg ) )
...

просто к примеру...
Re[12]: Откуда берутся true и false?
От: Roman Odaisky Украина  
Дата: 28.08.06 10:55
Оценка:
Здравствуйте, omka, Вы писали:

O>Так на чем остановились-то?

O>С чем сравнивать bool-переменные или возвращаемые значения функций? С целыми константами?
O>или может создавать
O>
O>enum { FALSE, TRUE };
O>

O>?

да ни с чем... if(var), if(!var), if(!x && (y || z)).

O>не использовать никогда bool? почему? я не вижу причины, почему нельзя сравнить два булевских операнда — нет приведения ни к int, ни к чему другому...кто-то потом может поменять мой вызов bool isConditionTrue(); на int isAnotherConditionTrue();?


А это и в самом деле очень интересный вопрос... Можно ли писать if(f() == g()), если обе они логические, т. е., скорее всего, bool, но могут оказаться и int? Смысл так писать вроде есть:
if(authData.isLogonSuccessful() == realm.isAuthenticationRequired())

O>Так пусть перед этим посмотрит мой код — раз проследить за сравниваемыми значениями и все — пусть меняет все конструкции типа
Ну это тяжко... А когда в C++09 мы будем писать
auto value = objectX.hasPropertyY(); // bool?

или когда чересчур умные шаблоны протащат int чересчур далеко, то создадим себе еще больше проблем...
До последнего не верил в пирамиду Лебедева.
Re[11]: Откуда берутся true и false?
От: _DAle_ Беларусь  
Дата: 28.08.06 17:17
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, Roman Odaisky, Вы писали:


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


RO>>>>В <locale> определен такой isalnum, как ты сказал. Заметь, второй параметр не имеет дефолтного значения. А как же, по-твоему, пишут В <cctype> определен int isalnum(int) ...the same as the Standard C library headers <ctype.h>... (21.4).

RO>>RTFM
CC>Ок. Убедил. Для <cctype> — верно.

Это верно и для ctype.h. Недавно это обсуждали. Подробности здесь
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.