Re[5]: Егор, что веселишься?
От: Ytz https://github.com/mtrempoltsev
Дата: 08.04.11 12:31
Оценка: :)
Лучше разобраться помоги, если знаешь
Re[2]: Приведение char* к bool
От: Vamp Россия  
Дата: 08.04.11 12:31
Оценка:
K>Сначала объясни, почему ты используешь такую орфографию.
Ты в диктанте про Агриппину Савишну сколько ошибок делаешь?
Да здравствует мыло душистое и веревка пушистая.
Re[13]: Приведение char* к bool
От: Vamp Россия  
Дата: 08.04.11 12:35
Оценка:
Ytz>Очевидно, что раз в C нет bool, то и приведения к нему быть не может Правило простое:
Ytz>0 — false
>0 — true

Только ты в этом простом правиле ошибку сделал. !0 — true, а не >0.
Кстати, в до-bool времена многие зачем-то (никогда не понимал, кстати) делали так:

#define TRUE 1;
#define FALSE 0;


Так вот это неправильно. Правильно так:
#define FALSE 0;
#define TRUE !FALSE;
Да здравствует мыло душистое и веревка пушистая.
Re[2]: Приведение char* к bool
От: Vamp Россия  
Дата: 08.04.11 12:41
Оценка: 5 (2)
24>Скорее всего, потому что char* -> bool — "встроенное" преобразование, а char* -> std::string — пользовательское.
Если говорить в терминах, то char* в bool — это так называемое boolean conversion (4.12), а char* в std::string — вызов пользовательского преобразования, conversion by constructor. У первого приоритет выше.
Да здравствует мыло душистое и веревка пушистая.
Re[14]: Приведение char* к bool
От: баг  
Дата: 08.04.11 12:42
Оценка:
Здравствуйте, Vamp, Вы писали:

Ytz>>Очевидно, что раз в C нет bool, то и приведения к нему быть не может Правило простое:

Ytz>>0 — false
>>0 — true

V>Только ты в этом простом правиле ошибку сделал. !0 — true, а не >0.

V>Кстати, в до-bool времена многие зачем-то (никогда не понимал, кстати) делали так:

V>
V>#define TRUE 1;
V>#define FALSE 0;
V>


V>Так вот это неправильно. Правильно так:

Тоже неправильно. Тогда уж так:
#define FALSE 0
#define TRUE (!FALSE)
Re[11]: Приведение char* к bool
От: night beast СССР  
Дата: 08.04.11 12:44
Оценка:
Здравствуйте, Ytz, Вы писали:

Ytz>Это ты говоришь о стандарте C99 в котором появился bool, но писать if (p) в C можно было всегда — это классика. Некоторые даже так извращались:


Ytz>Или как тебе классический K&R:


Ytz>
Ytz>while (*dst++ = *src++);
Ytz>


а, тебя интересует почему в c++ if принимает bool?
ну, во-первых это логично. во-вторых чтобы можно было использовать пользовательские типы в if.
Re[14]: Приведение char* к bool
От: jyuyjiyuijyu  
Дата: 08.04.11 12:44
Оценка:
Здравствуйте, Vamp, Вы писали:

Ytz>>Очевидно, что раз в C нет bool, то и приведения к нему быть не может Правило простое:

Ytz>>0 — false
>>0 — true

V>Только ты в этом простом правиле ошибку сделал. !0 — true, а не >0.

V>Кстати, в до-bool времена многие зачем-то (никогда не понимал, кстати) делали так:

V>
V>#define TRUE 1;
V>#define FALSE 0;
V>


V>Так вот это неправильно. Правильно так:

V>
V>#define FALSE 0;
V>#define TRUE !FALSE;
V>

может без ;
#define FALSE 0
#define TRUE !FALSE

оно не в каждом выражении можно

а почему неправильно ?
Re[6]: Егор, что веселишься?
От: Erop Россия  
Дата: 08.04.11 12:45
Оценка:
Здравствуйте, Ytz, Вы писали:

Ytz>Лучше разобраться помоги, если знаешь


Пока что я не улавливаю в чём именно ты хочешь разобраться.
IMHO, ты просто прикалываешься...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[15]: Приведение char* к bool
От: Vamp Россия  
Дата: 08.04.11 12:48
Оценка:
баг>Тоже неправильно. Тогда уж так:
#define FALSE 0
#define TRUE (!FALSE)


Обоснуй, пожалуйста.
Да здравствует мыло душистое и веревка пушистая.
Re[15]: Приведение char* к bool
От: jyuyjiyuijyu  
Дата: 08.04.11 12:50
Оценка:
Здравствуйте, баг, Вы писали:

баг>Здравствуйте, Vamp, Вы писали:


Ytz>>>Очевидно, что раз в C нет bool, то и приведения к нему быть не может Правило простое:

Ytz>>>0 — false
>>>0 — true

V>>Только ты в этом простом правиле ошибку сделал. !0 — true, а не >0.

V>>Кстати, в до-bool времена многие зачем-то (никогда не понимал, кстати) делали так:

V>>
V>>#define TRUE 1;
V>>#define FALSE 0;
V>>


V>>Так вот это неправильно. Правильно так:

баг>Тоже неправильно. Тогда уж так:
баг>
баг>#define FALSE 0
баг>#define TRUE (!FALSE)
баг>

скобки в этом макросе ради чистоты или можете показать когда без них нарушится порядок ?
я хотел поставить сначала но посмотрев таблицу операторов передумал
Re[14]: Приведение char* к bool
От: Vamp Россия  
Дата: 08.04.11 12:53
Оценка: :)))
V>Так вот это неправильно. Правильно так...
И быстренько, пока меня не выпороли, убираю точки с запятой после определения макросов
Да здравствует мыло душистое и веревка пушистая.
Re[7]: Приведение char* к bool
От: 24  
Дата: 08.04.11 17:31
Оценка: +1
Здравствуйте, Ytz, Вы писали:

Ytz>>>А зачем сделали такое неявное приведение?

24>>char* к bool? К bool многое приводится неявно, например чтоб писать if (p) вместо if (p != NULL)
Ytz>В С нет bool, но написать if (p) можно

Видимо для единообразия. В С внутри условий ведь ноль воспринимается как ложь, всё остальное — как истина, т.е. есть некоторое подобие булевого типа, который нельзя явно записать. А в С++ раз уж bool есть, то логично, что if, while и прочее, где нужно логическое выражение, принимает именно bool, а не что угодно. Следовательно всё остальное к нему должно приводиться по аналогичныим правилам, как в С. И раз оно приводится к bool внутри условий, то должно приводится и снаружи. Хотя как по мне, то эти неявные приведения только добавляют путаницы, и я всегда пишу полностью if (p != NULL).
Re[8]: Приведение char* к bool
От: баг  
Дата: 09.04.11 00:01
Оценка:
Здравствуйте, 24, Вы писали:

24>Следовательно всё остальное к нему должно приводиться по аналогичныим правилам, как в С.

Занятно. Значит, VC отсебятину лепит с предупреждениями? http://codepad.org/neVNoRpu
Re[16]: Приведение char* к bool
От: Roman Odaisky Украина  
Дата: 09.04.11 16:04
Оценка: 8 (1)
баг>>#define TRUE (!FALSE)
J>скобки в этом макросе ради чистоты или можете показать когда без них нарушится порядок ?

TRUE[s], оно же s[1]
До последнего не верил в пирамиду Лебедева.
Re[17]: Приведение char* к bool
От: jyuyjiyuijyu  
Дата: 09.04.11 23:07
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:

баг>>>#define TRUE (!FALSE)

J>>скобки в этом макросе ради чистоты или можете показать когда без них нарушится порядок ?

RO>TRUE[s], оно же s[1]

да этого то я и не заметил
и ведь знаю же эту конструкцию но ...
еще раз убедился что надо все тщательно проверять чем что то заключать
спасибо за пример
Re[17]: Приведение char* к bool
От: Vamp Россия  
Дата: 11.04.11 12:39
Оценка:
RO>TRUE[s], оно же s[1]
А в чем разница? Что со скобками, что без — компилируется все равно, хотя и не должно.
Да здравствует мыло душистое и веревка пушистая.
Re[18]: Приведение char* к bool
От: jyuyjiyuijyu  
Дата: 11.04.11 12:55
Оценка:
Здравствуйте, Vamp, Вы писали:

RO>>TRUE[s], оно же s[1]

V>А в чем разница? Что со скобками, что без — компилируется все равно, хотя и не должно.
если без скобочек то
тут отрицание применяется к элементу мнимого массива
TRUE[s]
а тут к индексу
s[TRUE]
просто без скобочек меняется логика
а почему не должно ?
Re[19]: Приведение char* к bool
От: Vamp Россия  
Дата: 11.04.11 12:58
Оценка:
J>а почему не должно ?
А какой в этом коде смысл? Не забудь, TRUE и FALSE — аналог булевых значений. Сравни с конструкцией true[s] в С++ — какой в ней смысл? Хотя тоже компилируется, надо понимать потому, что bool неявно приводится к int.
Да здравствует мыло душистое и веревка пушистая.
Re[20]: Приведение char* к bool
От: jyuyjiyuijyu  
Дата: 11.04.11 13:13
Оценка:
Здравствуйте, Vamp, Вы писали:

J>>а почему не должно ?

V>А какой в этом коде смысл? Не забудь, TRUE и FALSE — аналог булевых значений. Сравни с конструкцией true[s] в С++ — какой в ней смысл? Хотя тоже компилируется, надо понимать потому, что bool неявно приводится к int.
да понятно что код бредовый
но все таки это обман семантики TRUE[s]
никак не ожидаеш что к элементу будет применено отрицание
да и потом это к си тоже относится а там
какой нить ум может запросто применить TRUE
как индекс со значением 1 а получит черти что
Re: Приведение char* к bool
От: Uzumaki Naruto Ниоткуда  
Дата: 11.04.11 13:27
Оценка:
Потому что char* — это указатель — это адрес, а адрес — это число, раньше bool не было — были числа — а неравенство числа нулю так и пишется. Позже пояивлся bool — число, false = 0, true!=0.

Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.