Sdílet prostřednictvím


Podmíněný operátor: ?:

Syntaxe

expression ? expression : expression

Poznámky

Podmíněný operátor (? :) je ternární operátor (trvá tři operandy). Podmíněný operátor pracuje následujícím způsobem:

  • První operand je implicitně převeden na bool. Je vyhodnocen a před pokračováním jsou dokončeny všechny vedlejší účinky.

  • Pokud se první operand vyhodnotí jako true (1), vyhodnotí se druhý operand.

  • Pokud se první operand vyhodnotí jako false (0), vyhodnotí se třetí operand.

Výsledek podmíněného operátoru je určen podle toho, který operand je vyhodnocen, zda druhý nebo třetí. V podmíněném výrazu je vyhodnocen pouze jeden z posledních dvou operandů.

Podmíněné výrazy mají asociativitu zprava doleva. První operand musí být celočíselného typu nebo typu ukazatele. Pro druhý a třetí operand platí následující pravidla:

  • Pokud jsou oba operandy stejného typu, je výsledkem tohoto typu.

  • Pokud jsou oba operandy aritmetické nebo výčtové typy, provádějí se obvyklé aritmetické převody (pokryté standardními převody), které je převedou na běžný typ.

  • Pokud jsou oba operandy typu ukazatele nebo jeden je typ ukazatele a druhý je konstantní výraz, který se vyhodnotí jako 0, provede se převody ukazatelů, které je převedou na běžný typ.

  • Pokud jsou oba operandy odkazovými typy, provádějí se převody odkazů, které je převedou na běžný typ.

  • Pokud jsou oba operandy typu void, je společný typ typu void.

  • Pokud jsou oba operandy stejného uživatelem definovaného typu, je tento typ společný.

  • Pokud operandy mají různé typy a alespoň jeden z operandů má typ definovaný uživatelem, použijí se pravidla jazyka k určení společného typu. (Viz upozornění níže.)

Jakékoli kombinace druhého a třetího operandu, které nejsou uvedeny v předchozím seznamu, jsou neplatné. Typ výsledku je společný typ a je to l-hodnota, pokud jsou druhý i třetí operand stejného typu a oba jsou l-hodnoty.

Upozorňující

Pokud typy druhého a třetího operandu nejsou identické, jsou vyvolána komplexní pravidla převodu typů, jak je uvedeno ve standardu C++. Tyto převody můžou vést k neočekávanému chování, včetně konstrukce a zničení dočasných objektů. Z tohoto důvodu důrazně doporučujeme, abyste buď (1) nepoužívejte uživatelem definované typy jako operandy s podmíněným operátorem, nebo (2), pokud používáte uživatelem definované typy, a pak explicitně přetypujte každý operand na běžný typ.

Příklad

// expre_Expressions_with_the_Conditional_Operator.cpp
// compile with: /EHsc
// Demonstrate conditional operator
#include <iostream>
using namespace std;
int main() {
   int i = 1, j = 2;
   cout << ( i > j ? i : j ) << " is greater." << endl;
}

Viz také

Integrované operátory C++, jejich priorita a asociativita
Operátor podmíněného výrazu