런타임에 조건절이 거짓이면, 메시지를 출력하고, 프로그램을 종료시킴.
: void foo(int num) { assert ~~ }; 을 만들고,
assert를 이용해서 거짓조건 만들어서 실행하라.
: 우리가 사람의 나이를 출력하는 프로그램을 만든다고 하자.
이때 음수가 출력되면 안되겠지? 이를 염두하고 , 음수가 인자로 들어갈 경우,
프로그램을 종료시키는 프로그램을 assert 를 이용해 아래와 같이 만들 수 있다.
: 템플릿 프로그래밍에서 assert를 사용할 수 없으니까. 템플릿 프로그래밍에서 사용하자.
컴파일 시간에 조건식이 거짓이라면, msg를 출력하고, 컴파일을 멈추게함.
static_assert(bool 조건식 , message);
현재 32bit이므로, 포인터의 크기가 4이므로, 오류 발생함.
true이므로 이상 없음을 확인할 수 있음.
: 실행시간에 값이 결정되는 변수를 조건식에 넣을 수 없음.
: static_assert 는 컴파일 타임에만 검사가 가능함.
: 위 처럼 한계가 있는데 도대체 어디다가 사용할까???
가) 패킷이라는 구조체에 int, char을 집어 넣고,
사이즈가 int + char 일 경우를 판단을 하는 static_assert를 만들자.
설명 : 구조체 패딩은 최적화로 인해 가장 큰 데이터의 배수로
사이즈가 결정되기 때문에 , 15번줄에서 에러가 발생하는 것을 확인할 수 있다.
-> 해결하는 방법 #pragma pack(1) 을 사용하면 , 문제가 없음을 확인할 수 있다.
true일 경우
요거는 그냥 반대로만 작성한 거고.
원복하고, #pragma pack(1)을 작성해보자.
: 문제 없음!
https://blog.naver.com/kimwontae466/222441551653
나) mutex 객체 m1, m2의 경우, 복사 생성자가 없어서, 복사가 불가능함.
static_assert를 이용해 유저타입 Swap 함수에서
복사 검출확인을 진행하라.
-> 현재 오류코드는 단순히 복사가 안된다는 것을 나타내고 있음.