En muchos casos, necesitamos verificar el valor de algo devuelto por una función y realizar operaciones condicionales basadas en este valor. Así que nuestro código se parece a esto
// Some function return_type foo(params) // Call function with params and // store return in var auto var = foo(params); if (var == /* some value */) { //Do Something } else { //Do Something else }
Si bien esto está bien, tenga en cuenta que hay algunas sutilezas
- La variable se filtra al ámbito circundante, lo cual no está previsto y se debe tener cuidado para asegurarse de que esta variable no se mezcle con otras variables.
- Dado que esta variable ya se ha definido, si tuviéramos que llamar a otra función (por ejemplo, bar()) más adelante en el programa, necesitaríamos crear otra variable para almacenar los valores devueltos por bar().
- En tercer lugar, si el compilador puede saber explícitamente que la variable se utilizará solo en un bloque if-else, entonces puede optimizar mejor el código.
Observe el formato general en todos los bloques condicionales if-else. En primer lugar, hay una declaración inicial opcional que configura la variable, seguida del bloque if-else. Entonces, el bloque general if-else se parece a lo siguiente
init-statement if (condition) { // Do Something } else { // Do Something else }
En C++17, la instrucción init se denomina inicializador y podemos colocarla directamente en el bloque if-else de la siguiente manera
if (init-statement; condition) { // Do Something } else { // Do Something else }
El alcance de la variable condicionada se limita al bloque if-else actual. Esto también nos permite reutilizar el mismo identificador con nombre en otro bloque condicional.
if (auto var = foo(); condition) { ... } else{ ... } // Another if-else block if (auto var = bar(); condition) { .... } else { .... }
Asimismo, se ha actualizado el bloque de la caja del interruptor. Ahora podemos poner una expresión inicial dentro del paréntesis de cambio. Después de la declaración inicial, necesitamos especificar qué variable se está utilizando para verificar los casos.
switch (initial-statement; variable) { .... // cases }
un programa completo
// Program to demonstrate init if-else // feature introduced in C++17 #include <iostream> #include <cstdlib> using namespace std; int main() { // Set up rand function to be used // later in program srand(time(NULL)); // Before C++17 int i = 2; if ( i % 2 == 0) cout << i << " is even number" << endl; // After C++17 // if(init-statement; condition) if (int i = 4; i % 2 == 0 ) cout << i << " is even number" << endl; // Switch statement // switch(init;variable) switch (int i = rand() % 100; i) { default: cout << "i = " << i << endl; break; } }
Salida (dependiente de la máquina)
2 is even number 4 is even number i = 5
Nota: Para compilar estos programas necesitamos las últimas versiones de los compiladores. Al momento de escribir este artículo, esta función se ha implementado completamente en clang 5 y gcc 7 en adelante. Para compilar los programas también necesitamos especificar el indicador -std=c++17
g++-7 program_file.cpp -std=c++17 or clang++ program_file.cpp -std=c++17
¿Escribir código en un comentario? Utilice ide.geeksforgeeks.org , genere un enlace y compártalo aquí.
Publicación traducida automáticamente
Artículo escrito por Sayan Mahapatra y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA