Форум программистов, компьютерный форум CyberForum.ru

Линия кода 'S':'C' - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
sardinka
0 / 0 / 0
Регистрация: 13.12.2007
Сообщений: 87
11.03.2008, 22:04     Линия кода 'S':'C' #1
cho delaet vtorya polovina coda etoi lini (posle ?):
(strcmp(prokey1,'No Provider')==0) ? 'S':'C'
ili she
(strcmp(prokey1,'No Provider')==0) ? 'S':account_no
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2008, 22:04     Линия кода 'S':'C'
Посмотрите здесь:

C++ Выяснить, является ли линия уникурсальной
Ломаная линия (тема Файлы) C++
Наибольшая средняя линия треугольника C++
C++ Задача из Bjarne Stroustrup (Глава 12,7 №2)Графическая линия в консоли(в стиле ASCII)
Наследование классов: реализовать классы точка, линия, треугольник, круг C++
C++ Определение условия при котором линия не будет проходить через область
Класс линия C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
VVP
Сообщений: n/a
12.03.2008, 12:13     Линия кода 'S':'C' #2
Уважаемая Сардинка, это даже не смешно :-( Читайте хелпу, ну или книжку по C++.

А вообще эта запись эквивалентна:
Код
if(strcmp(prokey1,'No Provider')) some_var='S'; else some_var='C';
Запись <expression> ? <result if TRUE> : <result if FALSE>, это КОНСТРУКЦИЯ языка.

Лучше таких вопросов не пишите, помните первый принцип тех.поддержки: если пользователь не прочитал руководство, то отправить его читать руководство.
Snork
Сообщений: n/a
12.03.2008, 12:23     Линия кода 'S':'C' #3
>А вообще эта запись эквивалентна:
if(strcmp(prokey1,'No Provider')) some_var='S'; else some_var='C';

Не совсем так. Скорее

inline TYPE F(BOOL b, TYPE p1, TYPE p2)
{
if (b) return p1; else return p2;
}

Тогда

MessageBox(a < 5? '11' : '22');

разворачивается

в

inline LPCTSTR F(BOOL b, LPCTSTR p1, LPCTSTR p2)
{
if (b) return p1; else return p2;
}

MessageBox(F((a < 5), '11', '22')).

А вообще-то я не уверен, что этот код подставляемый. Может есть какая-нибудь стандартная F. Лучше спросить у разработчиков компиляторов.
VVP
Сообщений: n/a
12.03.2008, 12:42     Линия кода 'S':'C' #4
В свое время на BorlandC++ 3.1 специально проверял конструкцию ?:, вместе с if ... else, получился одинаковый ассемблерный код. Чего сейчас творится у компиляторов я не знаю.
Snork
Сообщений: n/a
12.03.2008, 16:50     Линия кода 'S':'C' #5
Будьте так добры, киньте примерчики. (Один - с ?:, второй с if-else).
Snork
Сообщений: n/a
12.03.2008, 16:55     Линия кода 'S':'C' #6
Если я вас правильно понял, то мой пример должен развернуться в
Код
if (a<5)
   MessageBox('11');
else
   MessageBox('22');
Так?

Будет время - посмотрю, что с этим всем делает MSVC++ и напишу.
VVP
Сообщений: n/a
12.03.2008, 17:09     Линия кода 'S':'C' #7
Да вы поняли правильно...
VVP
Сообщений: n/a
12.03.2008, 17:27     Линия кода 'S':'C' #8
Хотя нет, сейчас пересмотрел ваш пример, вообщем:

1.
Если записать
Код
  a<5?MessageBox('11'):MessageBox('22')
, то тогда ассеблерный код генерится аналогичным тому if-у, что вы написали.

2.
Если записать так как писали вы
Код
  MessageBox(a<5?'11':'22')
, то ассемблерный код будет отражать примерно следущее:
сначала вычислится значение временного результата '11' или '22',
потом временный результат будет передан в стек,
потом один раз будет вызвана MessageBox.
Snork
Сообщений: n/a
12.03.2008, 18:43     Линия кода 'S':'C' #9
То есть примерно то, что я написал вначале?
Snork
Сообщений: n/a
20.03.2008, 13:24     Линия кода 'S':'C' #10
Вот так и уходят от ответа...

Ни примеров, ни отклика.
VVP
Сообщений: n/a
20.03.2008, 13:43     Линия кода 'S':'C' #11
Ну от ответов я положим не ухожу, не надо передергивать. Это во-первых.
Во-вторых конструкция (? - это конструкция языка программирования С/С++!!! В какой inline и чего там разворачивается нам знать НЕ ВАЖНО, это приоритет компилятора, я лишь сделал предположение на основании анализа ассемблерного кода, который проводил очень давно, в период расцвета Borland C++ 3.1.
Ну и последнее использование этой конструкции эчень разнообразно, она может быть и l-value и r-value, например как вам такое:
Код
(a>5?x:y)=(b<18?p:k);
А, понравилось? И каким inline вы собираетесь это подменять?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.03.2008, 14:38     Линия кода 'S':'C'
Еще ссылки по теме:

Прямая линия на плоскости C++
C++ Побочная линия
Определить, имеет ли ломаная линия самопересечения C++
Разработать программу с использованием наследования классов, реализующую классы: точка; линия; круг C++
Реализовать иерархию классов Точка-Линия-Круг C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Snork
Сообщений: n/a
20.03.2008, 14:38     Линия кода 'S':'C' #12
Вы меня убедили. Не подменить никак.

Но и этой конструкции наш изначальный пример НЕ эквивалентен:
if(strcmp(prokey1,'No Provider')) some_var='S'; else some_var='C';

А если нет переменной? Как с MessageBox'ом? Только это я и хотел сказать. Жаль, что не подумал о r-value и l-value - не стал бы такую несостоятельную гипотезу выдвигать.
Yandex
Объявления
20.03.2008, 14:38     Линия кода 'S':'C'
Ответ Создать тему
Опции темы

Текущее время: 09:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru