C ++ 17中带有初始化程序的其他语句和Switch语句

在许多情况下,我们需要验证函数返回的值,然后根据该值执行条件操作。所以我们的代码如下-

// Some method or function
return_type foo(Params)
// Call function with Params and
// store return in var1
auto var1 = foo(Params);
if (var1 == /* some value */) {
   //Perform Something
} else {
   //Perform Something else
}

只需在所有条件if-else块中遵循通用格式即可。首先,存在一个可选的初始语句来设置变量,然后是if-else块。所以一般的if-else块给出如下-

init-statement
if (condition) {
   // Perform or Do Something
} else {
   // Perform or Do Something else
}

在C ++ 17中,init语句被表示为或称为初始化器,我们可以按照以下方式将其直接保存在if-else块中

if (init-statement; condition) {
   // Perform Something
} else {
   // Perform Something else
}

条件变量的范围被限制或限制为当前的if-else块。这也允许我们在另一个条件块中重用相同的命名标识符。

if (auto var1 = foo(); condition) {
   ...
}
else{
   ...
}
// Another if-else block
if (auto var1 = bar(); condition) {
   ....
}
else {
....
}

在类似情况下,开关盒块已被修改或更新。现在,我们可以在开关括号内保留一个初始表达式。

在初始语句之后,我们需要指定要实现的变量以检查情况

switch (initial-statement; variable) {
   ....
   // cases
}

完整的程序

// Program to explain or demonstrate init if-else
// feature introduced in C++17
#include <iostream>
#include <cstdlib>
using namespace std;
int main() {
   // Fix or set up rand function to be implemented
   // 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;
   }
}