OberonCore
https://forum.oberoncore.ru/

C++, очередной сюрприз
https://forum.oberoncore.ru/viewtopic.php?f=27&t=2222
Страница 2 из 2

Автор:  igor [ Среда, 06 Январь, 2010 12:29 ]
Заголовок сообщения:  Re: C++, очередной сюрприз

Значит "сюрприз" подтвердился.
kemiisto молодец! Тем, кто программирует на Си, полезно будет знать о таких сюрпризах.

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

igor писал(а):
kemiisto писал(а):
Код:
if (0 <= value <= 5)

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

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

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

kemiisto писал(а):
Да не важно. В С/С++ нет такой штуки, как двойные неравенства.

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

Автор:  Alexey Veselovsky [ Четверг, 07 Январь, 2010 02:27 ]
Заголовок сообщения:  Re: C++, очередной сюрприз

для пущего усугубления эффекта:
Код:
int x = 1;
if (12 < 10 <= x <= 14 + 10 == 1 ) std::cout << "some output\n";


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

Автор:  Geniepro [ Понедельник, 18 Январь, 2010 13:30 ]
Заголовок сообщения:  Re: C++, очередной сюрприз

kemiisto писал(а):
Оказывается С++ поддерживает двойные неравенства в роли условных выражений. :lol: Сегодня увидел. Скомпилируйте
...
И насладитесь ответом. :twisted:

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

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

Easily compare values against boundaries with statements such as

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

Автор:  Geniepro [ Понедельник, 18 Январь, 2010 13:34 ]
Заголовок сообщения:  Re: C++, очередной сюрприз

igor писал(а):
Значит "сюрприз" подтвердился.
kemiisto молодец! Тем, кто программирует на Си, полезно будет знать о таких сюрпризах.

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

Страница 2 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/