range-for
- C++부터 지원하는 새로운 모양의 반복문
- 배열 뿐 아니라 STL의 다양한 컨테이너 list, vector, set 등 사용이 가능하다.
- auto와 같이 사용되는 경우가 많다.
#include <iostream>
int main()
{
int x[10] = {1,2,3,4,5,6,7,8,9,10};
for ( auto n : x )
{
std::cout << n << " , ";
}
/*
for ( int i = 0; i < 10; i++)
{
std::cout << x[i] << ", ";
}
*/
}
if init
- c++ 17 부터 지원
- 조건문을 만들 때 초기화 구문을 추가 할 수 있다.
#include <iostream>
int foo() { return -1;}
int main()
{
/*
// 기존에 자주 사용하는 방식의 코드
int ret = foo();
if ( ret == -1 )
{
//....
}
*/
// if init 코드 (c++17부터 지원)
if ( int ret = foo() ; ret == -1 )
{
std::cout << "print 1" << std::endl;
}
/*
// 기존에 자주 사용하는 방식의 코드
int n = foo();
switch( n )
{
case 10: break;
case 20: break;
}
*/
// if init 코드 (c++17부터 지원)
switch( int n = foo(); n )
{
case 10: break;
case 20: break;
default :
std::cout << "print 2" << std::endl;
}
}
C++17에서 Run 했을 때의 결과 :
C++14에서 Run 했을 때의 결과 :
if constexpr
일반적인 if문은 실행시간에 조건식을 조사
- c++ 17 부터 지원
- if constexpr은 컴파일 시간에 조건식을 조사
- 조건식은 반드시 컴파일 시간에 값을 결정할 수 있어야 한다. (static if 라고도 불린다.)
- 탬플릿을 만들 때 주로 사용함. (일반적인 코딩에서는 잘 사용하지 않음...)
int main()
{
int n = 0;
if ( n == 0 )
{
//....
}
/*
if constexpr ( n == 0 ) // error
{
//....
}
*/
if constexpr ( sizeof(n) == 0 ) // ok..
{
//....
}
}
if constexpr 가 템플릿에서 사용되는 쉬운 예제:
template<typename T>
void foo(T a)
{
// if ( 0 ) // 실행 중에 해당 조건이 체크됨. 컴파일 단계에서 if 안의 코드 수행 체크됨.
if constexpr ( 0 ) // 컴파일 중에 해당 조건을 체크하기 때문에 *a = 0; 코드를 수행X
*a = 0;
}
int main()
{
int n = 0;
foo(&n); // T : int*
foo(n); // T : int
}
'C++' 카테고리의 다른 글
[C++] const reference, return by reference (0) | 2021.08.14 |
---|---|
[C++] reference 개념 (0) | 2021.08.13 |
[C++] 함수 : Lamda expression (람다 표현식) (0) | 2021.08.11 |
[C++] 함수 : constexpr function (0) | 2021.08.10 |
[C++] 함수 : 후위 반환 타입(suffix return, trailing return) (0) | 2021.08.10 |
댓글