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

C++17 이니셜라이저가 있는 If 문

<시간/>

C++17은 기존 if 문의 구문을 확장했습니다. 이제 if 문 자체 내에서 초기 조건을 제공할 수 있습니다. 이 새로운 구문을 "이니셜라이저가 있는 if 문"이라고 합니다. 이 개선 사항은 일반적인 코드 패턴을 단순화하고 사용자가 범위를 좁게 유지하는 데 도움이 됩니다. 그러면 범위 외부로 변수가 누출되는 것을 방지할 수 있습니다.

예시

주어진 숫자가 짝수인지 홀수인지 확인하고 싶다고 가정해 봅시다. C++17 이전에는 다음과 같은 코드가 사용되었습니다. -

#include <iostream>
#include <cstdlib>
using namespace std;
int main() {
   srand(time(NULL));
   int random_num = rand();
   if (random_num % 2 == 0) {
      cout << random_num << " is an even number\n";
   } else {
      cout << random_num << " is an odd number\n";
   }
   return 0;
}

출력

위의 코드를 컴파일하고 실행하면 다음과 같은 출력이 생성됩니다. -

1555814729 is an odd number

위의 예에서 변수 "random_num"이 if-else 범위 외부로 누출된 것을 볼 수 있습니다. 새로운 "초기화자가 있는 if 문" 구문을 사용하면 이를 쉽게 피할 수 있습니다.

다음은 "이니셜라이저가 있는 if 문"의 구문입니다. -

if (init; condition) {
   // Do stuff when Boolean condition is true
} else {
   // Do stuff when Boolean condition is false
}

예시

이제 이니셜라이저가 있는 이 새로운 if 문을 사용하여 동일한 코드를 작성해 보겠습니다. -

#include <iostream>
#include <cstdlib>
using namespace std;
int main() {
   srand(time(NULL));
   // C++17 if statement with initializer
   if (int random_num = rand(); random_num % 2 == 0) {
      cout << random_num << " is an even number\n";
   } else {
      cout << random_num << " is an odd number\n";
   }
   return 0;
}

위의 예에서 변수 "random_num"의 범위는 if-else 블록으로 제한됩니다. 따라서 이 변수는 이 블록 외부에서 액세스할 수 없습니다. 놀랍게도 실제 출력에 영향을 주지 않으면서 변수 범위를 좁게 유지합니다.

출력

위의 코드를 컴파일하고 실행하면 다음과 같은 출력이 생성됩니다. -

943513352 is an even number

참고 − 매번 난수를 생성하기 때문에 동일한 시스템에서도 실행할 때마다 출력이 달라집니다.