Operator warunkowy: ?:
Składnia
expression ? expression : expression
Uwagi
Operator warunkowy (? :) jest operatoremternary (przyjmuje trzy operandy). Operator warunkowy działa w następujący sposób:
Pierwszy operand jest niejawnie konwertowany na
bool
. Zostaje oceniony i przed kontynuowaniem ukończone zostają wszystkie efekty uboczne.Jeśli pierwszy operand oblicza
true
wartość (1), drugi operand jest obliczany.Jeśli pierwszy operand daje wartość
false
(0), zostanie obliczony trzeci operand.
Wynik operatora warunkowego jest wynikiem w zależności od ocenianego operandu — drugiego lub trzeciego. Tylko jeden z ostatnich dwóch operandów jest oceniany w wyrażeniu warunkowym.
Wyrażenia warunkowe mają zespolenie od prawej do lewej. Pierwszy operand musi być typu całkowitego lub typu wskaźnika. Następujące reguły dotyczą drugich i trzecich operandów:
Jeśli oba operandy są tego samego typu, wynik jest tego typu.
Jeśli oba operandy mają typy arytmetyczne lub wyliczenia, zwykle konwersje arytmetyczne (objęte konwersjami standardowymi) są wykonywane w celu przekonwertowania ich na typ wspólny.
Jeśli oba operandy mają typy wskaźników lub jeśli jeden jest typem wskaźnika, a drugi jest wyrażeniem stałym, które daje wartość 0, konwersje wskaźników są wykonywane w celu przekonwertowania ich na typ wspólny.
Jeśli oba operandy są typami referencyjnymi, konwersje odwołań są wykonywane w celu przekonwertowania ich na typ wspólny.
Jeśli oba operandy mają typ void, typ wspólny to void.
Jeśli oba operandy są tego samego typu zdefiniowanego przez użytkownika, typ wspólny to ten typ.
Jeśli operandy mają różne typy, a co najmniej jeden z operandów ma typ zdefiniowany przez użytkownika, reguły języka są używane do określania wspólnego typu. (Zobacz ostrzeżenie poniżej).
Dowolna kombinacja drugiego i trzeciego operandu nie wymieniona na powyższej liście nie jest dozwolona. Typ wyniku jest popularnym typem i l-wartością, jeśli zarówno drugi jak i trzeci operand są tego samego typu i oba są l-wartościami.
Ostrzeżenie
Jeśli typy drugich i trzecich operandów nie są identyczne, wywoływane są złożone reguły konwersji typów, jak określono w standardzie C++. Konwersje te mogą prowadzić do nieoczekiwanego zachowania, w tym budowy i zniszczenia obiektów tymczasowych. Z tego powodu zdecydowanie zalecamy (1) unikanie używania typów zdefiniowanych przez użytkownika jako operandów z operatorem warunkowym lub (2), jeśli używasz typów zdefiniowanych przez użytkownika, a następnie jawnie rzutowania każdego operandu na wspólny typ.
Przykład
// 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;
}
Zobacz też
Wbudowane operatory, pierwszeństwo i kojarzenie języka C++
Operator wyrażenia warunkowego
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla