SW/C++

C++ : static_assert 와 assert : 차이점, 활용법, 적용 방법

얇은생각 2020. 4. 6. 07:30
반응형

C++

 

assert

assert 기존 함수는 조건이 false면 실행을 멈추어줍니다. 즉, 실행 중에 가정이 맞는 지 평가합니다. 오직 디버그 빌드에서만 동작합니다. 실패한 assert를 보려면 반드시 프로그램을 실행해야 합니다.

모든 코드 경로가 실행되었다고 어떻게 장담할 수 있을까요? 일부 가정은 프로그램을 실행하기도 전에 알 수 있습니다.모든 곳에 assert를 쓰는 것은 여전히 유효한 조언 중 하나입니다.

 

 

 

static_assert

컴파일 중에 가정을 평가합니다. 컴파일러가 assert 조건이 참인지 아닌지를 아는 것입니다. 실패하면 컴파일러는 컴파일 에러를 뱉습니다. 많은 경우에 유용합니다. C++11에서 선호하는 기능 중 하나입니다. 

버전 확인, 배열의 길이, 메모리 크기 등을 검증할 떄 활용할 수 있습니다. 

 

 

 

베스트 프랙티스

최대한 assert 보다 static_assert를 사용합니다. 모든 곳에 static assert를 씁니다. 그리고 모든 곳에 assert를 활용합니다. 

assert를 사용한다면 여전피 프로그램을 실행시켜야 합니다. 실행 도중에만 가정을 포착합니다. 오직 디버그 빌드에서만 동작합니다.

static_assert를 사용한다면 컴파일 중에 모든 문제를 바로 알 수 있습니다. 또한 컴파일러처럼 생각하는 데도 큰 도움이 된다고 합니다.

반응형