반응형
CPP 초급 강좌 18. C++ if init, if constexpr, rang for
if init
C++17 부터 추가된 기능으로 조건문을 만들 때, 초기화 구문을 추가할 수 있게 되었다.
아래 코드를 보자.
int f1() {return 0;}
int main()
{
int n = f1();
if (n == 0)
{
//작업
}
}
위 코드를 if init 적용을 해보자.
int f1() {return 0;}
int main()
{
if (int n = f1() ; n == 0)
{
//작업
}
}
이와 같은 표현이 가능하다.
이런 표현이 어떤 이점이 있을까? int n = f1(); if 문 외부에 있다면, main 전역에서 변수가 생명력을 가지지만 if init을 통해 성성된 변수는 if문 안에서만 생명력을 가지는 이점이 있다.
switch에도 적용가능하다.
int f1() {return 0;}
int main()
{
switch (int n = f1() ; n)
{
}
}
if constexpr
if 조건문을 일반적으로 실행시간에 코드를 조사한다. C++17 부터 추가된 if constexpr 기능은 컴파일 시간에만 조사가 가능하다. 컴파일 시간에 비교하지 못하면 애러다. static if
int main()
{
int n = 10;
if (n == 10)
{
}
if constexpr (n == 10) //불가. 컴파일 시간에 조사 불가
{
}
if constexpr (5 == 10) //가능 컴파일 시간에 알수 있다.
{
}
}
이와 같은 기술은 템플릿 프로그래밍등에서, 내부에서 T가 포인터일때는 코드생성을 하고, 아닐때는 코드생성을 하지 않고 요런 곳에서 사용하곤 한다.
range for
c++11 부터 지원되는 새로운 반복문 형식이다.
int main()
{
int arr[7] = { 1,22,33,4,5,6,7 };
for (int i = 0; i < 7; i++)
{
cout << arr[i] << endl;
}
}
기존을 for문은 이런 식으로 사용했다고 하면, range for을 사용한다면 아래와 같이 표현 가능하다.
int main()
{
int arr[7] = { 1,22,33,4,5,6,7 };
for (auto n : arr)
{
cout << n << endl;
}
}
for (auto n : arr) 을 사용하면 if 문 영역에서 n이 순차적으로 들어온다. 위의 예제와 같은 동작을 보장한다.
해당 기능은 배열에만 사용하는 것이 아닌 STL 등 다양한 컨테이너들을 지원하고(list, vector, set)등, 커스텀하게 자신이 만든 형식에도 사용할 수 있다.
봐주셔서 감사합니다.
반응형
'IT > C++(CPP)' 카테고리의 다른 글
CPP 초급 강좌 20. C++ const reference (16) | 2020.10.30 |
---|---|
CPP 초급 강좌 19. C++ 레퍼런스 reference (6) | 2020.10.29 |
CPP 초급 강좌 17. C++ 람다표현식 lambda expression (22) | 2020.10.27 |
CPP 초급 강좌 16. C++ constexpr function (6) | 2020.10.26 |
CPP 초급 강좌 15. C++ 후위 반환 타입 trailing return type (1) | 2020.10.25 |
댓글