С++ для начинающих



         

Операции сравнения и логические операции - часть 3


// Внимание! это не сравнение 3 переменных друг с другом

if ( ival != jva1 != kva1 )

    // do something ...

Значения 0, 1 и 0 дают в результате вычисления такого выражения true. Почему? Сначала проверяется ival != jval, а потом итог этой проверки (true/false – преобразованной к 1/0) сравнивается с kval. Мы должны были явно написать:

if ( ival != jva1 && ival != kva1 && jva1 != kva1 )

    // сделать что-то ...

Упражнение 4.4

Найдите неправильные или непереносимые выражения, поясните. Как их можно изменить? (Заметим, что типы объектов не играют роли в данных примерах.)

(a) ptr->iva1 != 0

(с) ptr != 0 && *ptr++

(e) vec[ iva1++ ] <= vec[ ival ];

(b) ival != jva1 < kva1 (d) iva1++ && ival

Упражнение 4.5

Язык С++ не диктует порядок вычисления операций сравнения для того, чтобы позволить компилятору делать это оптимальным образом. Как вы думаете, стоило бы в данном случае пожертвовать эффективностью, чтобы избежать ошибок, связанных с предположением о вычислении выражения слева направо?




Содержание  Назад  Вперед