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

expression ? expression : expression

Poznámky

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

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

  • Pokud je první operand vyhodnocen jako true (1), je vyhodnocen druhý operand.

  • Pokud je první operand vyhodnocen jako false (0), je vyhodnocen 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.Následující pravidla se vztahují na druhý a třetí operandy:

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

  • Pokud jsou oba operandy aritmetický nebo výčet typů, obvyklých aritmetických převody (zahrnutých v aritmetických převody) se provádí převést do stejného typu.

  • Pokud jsou oba operandy typů ukazatel nebo jeden typ ukazatele a druhou je konstantní výraz, který je vyhodnocován na hodnotu 0, ukazatel převody jsou prováděny převést do stejného typu.

  • Pokud jsou oba operandy typů odkaz, odkaz převody jsou prováděny převést do stejného typu.

  • Pokud jsou oba operandy typu void, je typu void stejného typu.

  • Pokud jsou oba operandy stejného typu uživatelem definované, stejného typu, je daného typu.

  • Je-li operandy mají různé typy a alespoň jeden z operandy má typ uživatelem definovaného jazyka pravidla se používají k určení stejné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.

Poznámka k upozorněníUpozornění

Typy operandy druhý a třetí nejsou shodná, jsou vyvolány pravidla převodu komplexní typ, jak je uvedeno v C++ Standard.Tyto převody může vést k neočekávanému chování, včetně vytváření a zničení dočasné objekty.Z tohoto důvodu doporučujeme silného můžete buď (1) nepoužívejte uživatelem definované typy jako operandy podmíněné operátor nebo (2) Pokud pomocí uživatelem definovaných typů, pak explicitně přetypování operandem do stejného typu.

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é

Referenční dokumentace

Operátory jazyka C++

Operátory C++, priorita a asociativita

Koncepty

Operátor podmíněného výrazu