Use um operador condicional em C++
-
Use um operador condicional como uma expressão
rvalue
em C++ -
Use um operador condicional como uma expressão
lvalue
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; }
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