Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++17에서 이니셜라이저가 있는 Else 및 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 괄호 안에 초기 표현식을 유지할 수 있습니다.

초기 명령문 후에 사례를 확인하기 위해 구현되는 변수를 지정해야 합니다.

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;
   }
}