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

start [/forum/topic.php?fid=57&msg=34610629&tid=2028617]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
157ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 244ms |
| total: | 490ms |

| 0 / 0 |
