powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Услованя операция
14 сообщений из 14, страница 1 из 1
Услованя операция
    #34610386
Добрый день, возник вопрос, есть код:

-------------------------------------------------------
bool prisnak;

prisnak = true;

ShowMessage("При: " + (prisnak) ? "вет" : "дурок");

Этот код всегда показывает "вет".
------------------------------------------------------

Хотя если переделать:
------------------------------------------------------
bool prisnak;
AnsiString st;

prisnak = true;
st = (prisnak) ? "вет" : "дурок";

ShowMessage("При: " + st);

то все нормально.
-----------------------------------------------------
почему условная операция некорректно работает в той ситуации?
...
Рейтинг: 0 / 0
Услованя операция
    #34610444
Dronord
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Во-первых, лучше в скобки взять:
Код: plaintext
1.
2.
3.
4.
bool prisnak;

prisnak = true;

ShowMessage("При: " + ((prisnak) ? "вет" : "дурок") );

Во-вторых, код не показывает "При:" или никогда не показывает "При:дурок"?
...
Рейтинг: 0 / 0
Услованя операция
    #34610445
Фотография blinded
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эх, Иван Иваныч! Приоритеты операторов посмотри и скобочки добавь
...
Рейтинг: 0 / 0
Услованя операция
    #34610449
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DronordShowMessage("При: " + ((prisnak) ? "вет" : "дурок") );и что даст операция сложения двух указателей ?
если это вобще скомпилится
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Услованя операция
    #34610468
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Карабас Барабаси что даст операция сложения двух указателей ?
если это вобще скомпилится Скомпилится нормально, Борланд умеет так делать для типа AnsiString, а именно его и ожидает функция ShowMessage(). Неявное приведение типов типа
...
Рейтинг: 0 / 0
Услованя операция
    #34610490
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychСкомпилится нормальнонеявное приведение работает, когда операнды разного типа, а ты складываешь 2 указателя. Если ты приведешь один из них к AnsiSting, тогда второй приведется неявно. А то, что ожидает ShowMessage - совершенно пофиг
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Услованя операция
    #34610494
Иван ИванычДобрый день, возник вопрос, есть код:

-------------------------------------------------------
bool prisnak;

prisnak = true;

ShowMessage("При: " + (prisnak) ? "вет" : "дурок");

Этот код всегда показывает "вет".
------------------------------------------------------

Хотя если переделать:
------------------------------------------------------
bool prisnak;
AnsiString st;

prisnak = true;
st = (prisnak) ? "вет" : "дурок";

ShowMessage("При: " + st);

то все нормально.
-----------------------------------------------------
почему условная операция некорректно работает в той ситуации?
Потому что надо правильно ставить скобки...
Формат условной операции:
Код: plaintext
1.
<проверяемое условие>?<оператор, выполняемый если условие истинно>:<оператор, выполняемый условие ложно>

Ваше первое выражение:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
-------------------------------------------------------
bool prisnak;

prisnak = true;

ShowMessage("При: " + (prisnak) ? "вет" : "дурок");

Этот код всегда показывает "вет".
------------------------------------------------------

проверяемое условие ( "При: " + (prisnak) ) не равно 0 (т.е. является true), поэтому "Этот код всегда показывает "вет".

Во втором фрагменте вы все делаете корректно.

Правильный первый фрагмент:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
-------------------------------------------------------
bool prisnak;

prisnak = true;

ShowMessage("При: " + ((prisnak) ? "вет" : "дурок") );

------------------------------------------------------
...
Рейтинг: 0 / 0
Услованя операция
    #34610585
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Карабас Барабаснеявное приведение работает, когда операнды разного типа, а ты складываешь 2 указателя. Если ты приведешь один из них к AnsiSting, тогда второй приведется неявно. А то, что ожидает ShowMessage - совершенно пофиг Практика показывает, что зря я спорю - действительно неплохо-бы хоть чего-нить привести к AnsiString.
...
Рейтинг: 0 / 0
Услованя операция
    #34610608
Sandro_K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не могу понять, как это может вообще работать, тут складываются указатели, и только потом, при передачу в функцию, должно пройти преобразование в AnsiString. Или я чего-то недопонимаю?
...
Рейтинг: 0 / 0
Услованя операция
    #34610629
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тот код, который всегда возвращает "вет" действительно работает, не происходит складывания указателей, а вот исправленный - требует явного приведения хоть какого-нибудь куска, что, в общем-то логично
...
Рейтинг: 0 / 0
Услованя операция
    #34610639
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sandro_KНе могу понять, как это может вообще работать, тут складываются указатели, и только потом, при передачу в функцию, должно пройти преобразование в AnsiString. Или я чего-то недопонимаю?

По всей видимости указатель инкрементируется на bool приведенный к int, получается не null и возвращается "вет"
...
Рейтинг: 0 / 0
Услованя операция
    #34610645
Sandro_K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, уже все понял
...
Рейтинг: 0 / 0
Услованя операция
    #34610838
Понятно, тут такое обсуждение началось, жаль что на обед выходил, как-то не подумал, а если скобки, то нужно было к Ansi приводить, иначе invalid pointer. Спасибо.
...
Рейтинг: 0 / 0
Услованя операция
    #34616375
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> bool prisnak;
> AnsiString st;
>
> prisnak = true;
> st = (prisnak) ? "вет" : "дурок";
>
> ShowMessage("При: " + st);
> почему условная операция некорректно работает в той ситуации?

Потому что operator+ для AnsiString и для char* работают немного
по-разному. В первом случае код некорректный.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Услованя операция
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]