Поделиться через


Оператор Conditional-Expression

C имеет один троичный оператор: оператор условного выражения (? :).      

Синтаксис

  • условное-выражение:
    логическое-выражение-ИЛИ

    логическое-выражение-ИЛИ**?** выражение : условное-выражение

логическое-выражение-ИЛИ должно принадлежать целочисленному типу, типу с плавающей запятой или типу указателя. Оно вычисляется с точки зрения эквивалентности значению 0. Точка последовательности следует за логическим-выражением-ИЛИ. Вычисление операндов продолжается следующим образом.

  • Если логическое-выражение-ИЛИ не равно 0, вычисляется выражение. Результат вычисления выражения предоставляется нетерминальным выражением. (Это означает, что выражение вычисляется, только если логическое-выражение-ИЛИ имеет значение true.)

  • Если логическое-выражение-ИЛИ равно 0, вычисляется условное-выражение. Результатом выражения является значение условного-выражения. (Это означает, что условное-выражение вычисляется, только если логическое-выражение-ИЛИ имеет значение false.)

Обратите внимание, что вычисляется только выражение или только условное-выражение, но не оба операнда.

Тип результата условной операции зависит от типа операнда выражение или условное-выражение, как показано ниже.

  • Если выражение или условное-выражение+ имеет целочисленный тип или тип с плавающей запятой (типы могут отличаться), оператор выполняет обычные арифметические преобразования. После преобразования тип результата совпадает с типом операндов.

  • Если выражение и условное-выражение имеют одинаковый тип структуры, объединения или указателя, результат будет принадлежать тому же типу структуры, объединения или указателя.

  • Если оба операнда имеют тип void, результат будет принадлежать типу void.

  • Если какой-либо из операндов является указателем на объект любого типа, а второй операнд является указателем на void, указатель на объект преобразуется в указатель на void, и результатом является указатель на void.

  • Если выражение или условное-выражение является указателем, а другой операнд — константным выражением со значением 0, результат будет иметь тип указателя.

В сравнении типа указателей любые квалификаторы типов (const или volatile) в типе, на который указывают указатели, не значимы, но тип результата наследует квалификаторы от обоих компонентов условного выражения.

Примеры

В следующих примерах показаны варианты использования условного оператора.

j = ( i < 0 ) ? ( -i ) : ( i );

В этом примере абсолютное значение i присваивается j. Если значение i меньше 0, значение -i присваивается j. Если значение i больше или равно 0, значение i присваивается j.

void f1( void );
void f2( void );
int x;
int y;
    .
    .
    .
( x == y ) ? ( f1() ) : ( f2() );

В этом примере объявляется две функции f1 и f2 и две переменные x и y. Далее в программе, если две переменные имеют одинаковое значение, вызывается функция f1. В противном случае вызывается функция f2.

См. также

Ссылки

Условный оператор: ? :