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