
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
21.06.2007, 12:36
|
|||
|---|---|---|---|
|
|||
Услованя операция |
|||
|
#18+
Добрый день, возник вопрос, есть код: ------------------------------------------------------- bool prisnak; prisnak = true; ShowMessage("При: " + (prisnak) ? "вет" : "дурок"); Этот код всегда показывает "вет". ------------------------------------------------------ Хотя если переделать: ------------------------------------------------------ bool prisnak; AnsiString st; prisnak = true; st = (prisnak) ? "вет" : "дурок"; ShowMessage("При: " + st); то все нормально. ----------------------------------------------------- почему условная операция некорректно работает в той ситуации? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.06.2007, 12:46
|
|||
|---|---|---|---|
|
|||
Услованя операция |
|||
|
#18+
Во-первых, лучше в скобки взять: Код: plaintext 1. 2. 3. 4. Во-вторых, код не показывает "При:" или никогда не показывает "При:дурок"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.06.2007, 12:47
|
|||
|---|---|---|---|
|
|||
Услованя операция |
|||
|
#18+
DronordShowMessage("При: " + ((prisnak) ? "вет" : "дурок") );и что даст операция сложения двух указателей ? если это вобще скомпилится Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.06.2007, 12:50
|
|||
|---|---|---|---|
Услованя операция |
|||
|
#18+
Карабас Барабаси что даст операция сложения двух указателей ? если это вобще скомпилится Скомпилится нормально, Борланд умеет так делать для типа AnsiString, а именно его и ожидает функция ShowMessage(). Неявное приведение типов типа ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.06.2007, 12:54
|
|||
|---|---|---|---|
|
|||
Услованя операция |
|||
|
#18+
egorychСкомпилится нормальнонеявное приведение работает, когда операнды разного типа, а ты складываешь 2 указателя. Если ты приведешь один из них к AnsiSting, тогда второй приведется неявно. А то, что ожидает ShowMessage - совершенно пофиг Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.06.2007, 12:55
|
|||
|---|---|---|---|
|
|||
Услованя операция |
|||
|
#18+
Иван ИванычДобрый день, возник вопрос, есть код: ------------------------------------------------------- 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. проверяемое условие ( "При: " + (prisnak) ) не равно 0 (т.е. является true), поэтому "Этот код всегда показывает "вет". Во втором фрагменте вы все делаете корректно. Правильный первый фрагмент: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.06.2007, 13:09
|
|||
|---|---|---|---|
Услованя операция |
|||
|
#18+
Карабас Барабаснеявное приведение работает, когда операнды разного типа, а ты складываешь 2 указателя. Если ты приведешь один из них к AnsiSting, тогда второй приведется неявно. А то, что ожидает ShowMessage - совершенно пофиг Практика показывает, что зря я спорю - действительно неплохо-бы хоть чего-нить привести к AnsiString. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.06.2007, 13:13
|
|||
|---|---|---|---|
Услованя операция |
|||
|
#18+
Не могу понять, как это может вообще работать, тут складываются указатели, и только потом, при передачу в функцию, должно пройти преобразование в AnsiString. Или я чего-то недопонимаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.06.2007, 13:18
|
|||
|---|---|---|---|
Услованя операция |
|||
|
#18+
тот код, который всегда возвращает "вет" действительно работает, не происходит складывания указателей, а вот исправленный - требует явного приведения хоть какого-нибудь куска, что, в общем-то логично ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.06.2007, 13:20
|
|||
|---|---|---|---|
Услованя операция |
|||
|
#18+
Sandro_KНе могу понять, как это может вообще работать, тут складываются указатели, и только потом, при передачу в функцию, должно пройти преобразование в AnsiString. Или я чего-то недопонимаю? По всей видимости указатель инкрементируется на bool приведенный к int, получается не null и возвращается "вет" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.06.2007, 13:22
|
|||
|---|---|---|---|
Услованя операция |
|||
|
#18+
Спасибо, уже все понял ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
21.06.2007, 13:58
|
|||
|---|---|---|---|
|
|||
Услованя операция |
|||
|
#18+
Понятно, тут такое обсуждение началось, жаль что на обед выходил, как-то не подумал, а если скобки, то нужно было к Ansi приводить, иначе invalid pointer. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
25.06.2007, 08:51
|
|||
|---|---|---|---|
Услованя операция |
|||
|
#18+
> bool prisnak; > AnsiString st; > > prisnak = true; > st = (prisnak) ? "вет" : "дурок"; > > ShowMessage("При: " + st); > почему условная операция некорректно работает в той ситуации? Потому что operator+ для AnsiString и для char* работают немного по-разному. В первом случае код некорректный. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=57&tablet=1&tid=2028617]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
14ms |
get forum data: |
4ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 231ms |
| total: | 366ms |

| 0 / 0 |
