Feltételes operátor: ?:

Szemantika

expression ? expression : expression

Megjegyzések

A feltételes operátor (? :) egy ternáris operátor (három operandust vesz igénybe). A feltételes operátor a következőképpen működik:

  • Az első operandus implicit módon lesz átalakítva bool. A folytatás előtt kiértékeljük, és minden mellékhatás befejeződik.

  • Ha az első operandus (1) értéket true ad, a második operandus lesz kiértékelve.

  • Ha az első operandus (0) értéket false ad, a harmadik operandus lesz kiértékelve.

A feltételes operátor eredménye a kiértékelt operandus eredménye – a második vagy a harmadik. A rendszer csak az utolsó két operandus egyikét értékeli ki egy feltételes kifejezésben.

A feltételes kifejezések jobbról balra asszociativitással rendelkeznek. Az első operandusnak integrál vagy mutató típusúnak kell lennie. A második és a harmadik operandusra a következő szabályok vonatkoznak:

  • Ha mindkét operandus azonos típusú, az eredmény ennek a típusnak a eredménye.

  • Ha mindkét operandus számtani vagy számbavételi típusú, a szokásos aritmetikai átalakítások (a Standard konverziókban szerepelnek) a rendszer azokat általános típussá alakítja.

  • Ha mindkét operandus mutatótípusú, vagy ha az egyik mutató típusú, a másik pedig egy 0-ra kiértékelt állandó kifejezés, akkor a rendszer a mutatók konvertálását hajtja végre, hogy azokat általános típussá alakítsa.

  • Ha mindkét operandus referenciatípusú, a referenciakonvertálások a gyakori típussá alakításukhoz lesznek végrehajtva.

  • Ha mindkét operandus érvénytelen típusú, akkor a közös típus az üres típus.

  • Ha mindkét operandus azonos felhasználó által definiált típus, a közös típus az ilyen típusú.

  • Ha az operandusok különböző típusúak, és legalább az egyik operandus felhasználó által definiált típussal rendelkezik, akkor a nyelvi szabályok határozzák meg a közös típust. (Lásd az alábbi figyelmeztetést.)

Az előző listában nem szereplő második és harmadik operandusok bármilyen kombinációja illegális. Az eredmény típusa a gyakori típus, és l-érték, ha a második és a harmadik operandus is azonos típusú, és mindkettő l-érték.

Figyelmeztetés

Ha a második és a harmadik operandus típusa nem azonos, akkor a rendszer a C++ Standardban megadott összetett típusátalakítási szabályokat hívja meg. Ezek az átalakítások váratlan viselkedéshez vezethetnek, beleértve az ideiglenes objektumok építését és megsemmisítését. Ezért határozottan javasoljuk, hogy (1) kerülje a felhasználó által definiált típusok operandusként való használatát a feltételes operátorral, vagy (2) ha felhasználó által definiált típusokat használ, akkor explicit módon adja át az egyes operandusokat egy közös típusra.

példa

// 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;
}

Lásd még

C++ beépített operátorok, elsőbbségi és asszociativitás
Conditional-Expression operátor