Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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
truead, a második operandus lesz kiértékelve.Ha az első operandus (0) értéket
falsead, 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