OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Суббота, 14 Декабрь, 2019 22:45

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: C++, очередной сюрприз
СообщениеДобавлено: Среда, 06 Январь, 2010 12:29 

Зарегистрирован: Вторник, 13 Ноябрь, 2007 20:38
Сообщения: 1056
Значит "сюрприз" подтвердился.
kemiisto молодец! Тем, кто программирует на Си, полезно будет знать о таких сюрпризах.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: C++, очередной сюрприз
СообщениеДобавлено: Среда, 06 Январь, 2010 15:36 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3127
Откуда: Астрахань
igor писал(а):
kemiisto писал(а):
Код:
if (0 <= value <= 5)

Что тут происходит (?):
  • Вычисляется значение выражения 0 <= value. true.
  • Вычисляется значение выражения true <= 5. То есть 1 <= 5. true.
УЖОС!!! Вот это и называется кривой реализацией. Если компилятор работает именно так как Вы описали, то я просто в шоке от такого компилятора.

Это не компилятор. Это - язык программирования. Тяжелое наследие детства, то есть С.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: C++, очередной сюрприз
СообщениеДобавлено: Среда, 06 Январь, 2010 15:40 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3127
Откуда: Астрахань
kemiisto писал(а):
Да не важно. В С/С++ нет такой штуки, как двойные неравенства.

Двойные неравенства - это обычное выражение с точки зрения С++. Поэтому двойные неравенства есть. Другое дело, что вычисляются они не совсем так, как предполагает начинающий программист... :) Что, собственно, вы и показали... :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: C++, очередной сюрприз
СообщениеДобавлено: Четверг, 07 Январь, 2010 02:27 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
для пущего усугубления эффекта:
Код:
int x = 1;
if (12 < 10 <= x <= 14 + 10 == 1 ) std::cout << "some output\n";


Но это естественно грабли для совсем начинающих. Причем грабли не С++, а чисто С.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: C++, очередной сюрприз
СообщениеДобавлено: Понедельник, 18 Январь, 2010 13:30 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
kemiisto писал(а):
Оказывается С++ поддерживает двойные неравенства в роли условных выражений. :lol: Сегодня увидел. Скомпилируйте
...
И насладитесь ответом. :twisted:

Причём здесь С++? Это ещё со времён Си так осталось.

Кстати, а вот в языке Oxygene (ранее Chrome) / Delphi Prism это работает так, как вы ожидали:
Цитата:
Boolean Double Comparisons

Easily compare values against boundaries with statements such as

if 0 <= x < Count then //...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: C++, очередной сюрприз
СообщениеДобавлено: Понедельник, 18 Январь, 2010 13:34 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
igor писал(а):
Значит "сюрприз" подтвердился.
kemiisto молодец! Тем, кто программирует на Си, полезно будет знать о таких сюрпризах.

В чём заключается сюрприз -- непонятно.
Первым делом, что должен знать программист на си -- это то, что "ложь" -- это ноль, а "истина" -- это не ноль...


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 26 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB