Compartilhar via


Operador condicional: ?:

Sintaxe

expression ? expression : expression

Comentários

O operador condicional (? :) é um operador ternário (utiliza três operandos). O operador condicional funciona desta forma:

  • O primeiro operando é convertido implicitamente em bool. É avaliado e todos os efeitos colaterais são concluídos antes de continuar.

  • Se o primeiro operando é avaliado como true (1), o segundo operando será avaliado.

  • Se o primeiro operando é avaliado como false (0), o terceiro operando é avaliado.

O resultado do operador condicional é o resultado de qualquer operando avaliado — o segundo ou o terceiro. Somente um dos dois operandos dos dois mais recentes é avaliado em uma expressão condicional.

As expressões condicionais têm a capacidade da direita para a esquerda. O primeiro operando deve ser do tipo integral ou ponteiro. As regras a seguir se aplicam ao segundo e terceiro operandos:

  • Se ambos os operandos forem do mesmo tipo, o resultado será desse tipo.

  • Se ambos os operandos forem do tipo aritmético ou de enumeração, as conversões aritméticas comuns (abrangidas em Conversões aritméticas) serão executadas para convertê-los em um tipo comum.

  • Se ambos os operandos forem de tipos de ponteiro ou se um for um tipo de ponteiro e o outro for uma expressão constante avaliada como 0, as conversões do ponteiro serão executadas para convertê-los em um tipo comum.

  • Se ambas os operandos forem de tipos de referência, as conversões de referência serão executadas para convertê-los em um tipo comum.

  • Se ambos os operandos forem do tipo nulo, o tipo comum será do tipo nulo.

  • Se ambos os operandos forem do mesmo tipo definido pelo usuário, o tipo comum será esse tipo.

  • Se os operandos tiverem tipos diferentes e pelo menos um dos operandos tiver um tipo definido pelo usuário, as regras de linguagem serão usadas para determinar o tipo comum. (Confira o aviso abaixo.)

Todas as combinações do segundo e do terceiro operando que não estiverem na lista anterior são ilegais. O tipo de resultado é o tipo comum, e é um l-value se o segundo e o terceiro operandos forem do mesmo tipo e ambos forem l-values.

Aviso

Se os tipos do segundo e terceiro operandos não forem idênticos, as regras de conversão de tipo complexas, conforme especificado no C++ Standard, serão invocadas. Essas conversões podem levar a um comportamento inesperado, incluindo a construção e a destruição de objetos temporários. Por esse motivo, recomendamos que você (1) evite usar tipos definidos pelo usuário como operandos com o operador condicional ou (2) se você usar tipos definidos pelo usuário, converta explicitamente cada operando para um tipo comum.

Exemplo

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

Confira também

Operadores internos C++, precedência e associatividade
Operador de expressão condicional