Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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