Use um operador condicional em C++

Jinku Hu 12 outubro 2023
  1. Use um operador condicional como uma expressão rvalue em C++
  2. Use um operador condicional como uma expressão lvalue em C++
Use um operador condicional em C++

Este artigo explicará como utilizar um operador condicional C++.

Use um operador condicional como uma expressão rvalue em C++

Além dos operadores aritméticos, lógicos e de atribuição comuns, C++ fornece alguns operadores especiais, um dos quais é um operador ternário condicional. Ternário implica que o operador leva três operandos. É chamado de operador condicional porque funciona de maneira semelhante à instrução if-else. O operador tem a forma E1 ? E2 : E3, onde o primeiro operando pode ser tratado como a condição if, que é avaliada e convertida para o valor bool.

Se o valor bool for true, a seguinte expressão (E2) é avaliada e seus efeitos colaterais ocorrem. Caso contrário, a terceira expressão (E3) é avaliada com seus efeitos colaterais. Observe que podemos utilizar este operador como a expressão rvalue para atribuir um valor a uma variável condicionalmente. No código de exemplo a seguir, lemos um inteiro da entrada do usuário e avaliamos a expressão de comparação input > 10, representando o operando E1 no operador condicional. A variável n é atribuída ao valor input apenas quando E1 é verdadeiro.

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

int main() {
  int input;

  cout << "Enter a single integer: ";
  cin >> input;
  int n = input > 10 ? input : 10;

  cout << "n = " << n << endl;

  return EXIT_SUCCESS;
}

Resultado:

Enter a single integer : 21 n = 21

Use um operador condicional como uma expressão lvalue em C++

Alternativamente, podemos utilizar o operador ternário como uma expressão lvalue para escolher condicionalmente um nome de variável na qual a operação de atribuição é conduzida. Observe que apenas especificamos os nomes das variáveis ​​como o segundo e o terceiro operandos. Geralmente, porém, você pode especificar expressões como cout, que tem efeitos colaterais externos; esses efeitos são executados normalmente.

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

int main() {
  int input;

  cout << "Enter a single integer: ";
  cin >> input;
  int n = input > 10 ? input : 10;

  cout << "n = " << n << endl;

  int m = 30;
  (n == m ? n : m) = (m * 10) + 2;

  cout << "m = " << m << endl;

  return EXIT_SUCCESS;
}

Resultado:

Enter a single integer : 21 n = 21 m = 302

Outro caso de uso para o operador ternário pode ser na definição class. O exemplo de código a seguir demonstra tal cenário, em que implementamos um construtor recursivo para uma estrutura MyClass semelhante a um nó em uma lista vinculada de forma simples. Nesse caso, especificamos a chamada do construtor como o segundo operando, chamado com o argumento next, e continuamos a pilha de chamadas recursivas até que node.next seja avaliado como um valor false. O último é apenas o caso quando o ponteiro node.next é nullptr.

#include <iostream>
#include <string>

struct MyClass {
  MyClass* next;
  int data;

  MyClass(const MyClass& node)
      : next(node.next ? new MyClass(*node.next) : nullptr), data(node.data) {}

  MyClass(int d) : next(nullptr), data(d) {}

  ~MyClass() { delete next; }
};

int main() { return EXIT_SUCCESS; }
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artigo relacionado - C++ Operator