Operator warunkowy: ? :
expression ? expression : expression
Uwagi
Operator warunkowe (?:) jest trójargumentowy (trwa trzy argumenty).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 ma wartość true (1), drugi operand jest oceniany.
Jeśli pierwszy operand ma wartość false (0), trzeci operand jest oceniany.
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.Poniższe reguły dotyczą drugi i trzeci argumenty:
Jeśli oba argumenty są tego samego typu, wynikiem jest tego typu.
Jeśli oba argumenty są arytmetyczne lub wyliczanie typów, zwykle konwersje arytmetycznych (opisanych w arytmetycznych konwersje) są wykonywane przekonwertować je na wspólnego typu.
Jeśli oba argumenty są typów wskaźnik lub jest typ wskaźnika, a druga stałego wyrażenia, które oblicza 0, konwersje wskaźnik są wykonywane przekonwertować je na wspólnego typu.
Jeśli oba argumenty typu odwołania, konwersje odwołania są wykonywane przekonwertować je na wspólnego typu.
Jeśli oba argumenty typu void, wspólnego typu jest typ void.
Jeśli oba argumenty są tego samego typu zdefiniowanych przez użytkownika, wspólnego typu jest tego typu.
Jeśli argumenty mają różne typy i co najmniej jeden z argumentów ma typ zdefiniowany przez użytkownika z regułami języka są używane do określenia 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.
Przestroga |
---|
Jeśli typy argumentów drugi i trzeci nie są takie same, reguły konwersji typu złożonego, jak określono w C++ Standard, są wywoływane.Te konwersje może prowadzić do nieoczekiwanego zachowania w tym konstruowania i zniszczeniem tymczasowe obiektów.Z tego powodu stanowczo do albo (1) należy unikać typów zdefiniowanych przez użytkownika jako argumenty z operatorem warunkowych lub (2) Jeśli możesz korzystać z typów zdefiniowanych przez użytkownika, a następnie jawnie oddać każdy argument operacji do wspólnego typu. |
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ż
Informacje
Operatory, pierwszeństwo i kojarzenie języka C++