LINUX.ORG.RU

История изменений

Исправление NegatiV, (текущая версия) :

Стандарт C++11 глава 5.16 (в станадрте C думаю также) гарантирует, что в зависимости от значения первого выражения вычислится либо второе выражение, либо третье. В твоем примере вызов u1() гарантирует такое поведение, т.е. u1()?do1t():u2()?do2t():do2f(); раскладывается на что-то вроде:

if (u1())
   do1t();
else if (u2())
   do2t();
else 
   do2f();

Исходная версия NegatiV, :

Стандарт C++11 глава 5.16 (в станадрте C думаю также) гарантирует, что в зависимости от значения первого выражения вычислится либо второе выражение, либо третье. В твоем примере вызов u1() гарантирует такое поведение, т.е. u1()?do1t():u2()?do2t():do2f(); раскладывается на что-то вроде:

if (u1())
   do1t();
else if (u2())
   do2t();
else 
   do2f();
Пример:
int a = 0, b = 0;
1? a : b = 1;
Если ?: левоассоциативен, то a = 1 и b = 0, иначе a = 0 и b = 1.