Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Operador condicional:
Sintaxe
expression ? expression : expression
Observações
O operador condicional (? :) é um operador ternário (são necessários três operandos). O operador condicional funciona da seguinte forma:
O primeiro operando é implicitamente convertido em
bool. É avaliado e todos os efeitos secundários são concluídos antes de continuar.Se o primeiro operando for avaliado como
true(1), o segundo operando será avaliado.Se o primeiro operando for avaliado como
false(0), o terceiro operando será avaliado.
O resultado do operador condicional é o resultado de qualquer operando avaliado — o segundo ou o terceiro. Apenas um dos dois últimos operandos é avaliado em uma expressão condicional.
As expressões condicionais têm associatividade da direita para a esquerda. O primeiro operando deve ser do tipo integral ou ponteiro. As seguintes regras 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 de tipos aritméticos ou de enumeração, as conversões aritméticas usuais (cobertas em Conversões padrão) serão realizadas 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 de ponteiro serão realizadas para convertê-los em um tipo comum.
Se ambos 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 são do tipo void, o tipo comum é type void.
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. (Veja o aviso abaixo.)
Quaisquer combinações de segundo e terceiro operandos que não constem da lista anterior são ilegais. O tipo do resultado é o tipo comum, e é um valor l se o segundo e terceiro operandos são do mesmo tipo e ambos são valores l.
Advertência
Se os tipos do segundo e terceiro operandos não forem idênticos, as regras de conversão de tipo complexas, conforme especificado no padrão C++, serão invocadas. Essas conversões podem levar a um comportamento inesperado, incluindo a construção e 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 e, em seguida, 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;
}
Ver também
Operadores integrados C++, precedência e associatividade
OperadorConditional-Expression