Цитата(WhKitten @ 22.4.2011, 16:36 ) | Можно ли так делать и будет ли значение такого выражения чётко определено в независимости от реализации? |
По стандарту последовательность вычислений выражений в if чётко определена. Мало того, если первое (вернее очередное) условие дает однозначный вывод о результате (false && expr или true || expr), то оставшаяся часть вычисляться не будет. Это что касается стандарта. Во всех ли реализациях он будет поддерживаться ? Думаю да. Во всяком случае в этой части.
Если уж сильно смущает, можешь переписать без дополнительной переменной и без присваивания. Будет более громоздко, но (м.б.) более приятно глазу
Код | node* r = getRootNode(); node* n; if ( ( r->north && r->north->north && r->northr->north->data->isValid() ) || ( r->east && r->east->east && r->eastr->east->data->isValid() ) || ( r->south && r->south->south && r->southr->south->data->isValid() ) || ( r->west && r->west->west && r->westr->west->data->isValid() ) ) { // некоторый код }
|
только сейчас заметил там не хватает откравающих скобок. оно вообще не должно компилироваться |