Udostępnij za pośrednictwem


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.

Informacje dotyczące przestrogiPrzestroga

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 języka C++

Operatory, pierwszeństwo i kojarzenie języka C++

Koncepcje

Operator wyrażenia warunkowego