C++

    인라인함수, 매크로함수

    인라인 함수 함수를 호출하는 코드를 함수의 몸체로 치환하는식으로 동작한다. 인라인 함수가 될지 안될지는 컴파일러 마음이다. 매크로 함수의 장점. 1. 단순 치환이므로 빠르다. 2. 메모리 공간을 차지하지않는다. 3. 다양한 타입을 인자로 받을 수 있다. 매크로 함수의 단점. 1. 복잡한 함수를 만들기 어렵다.(역슬래쉬로 개행) 2. 디버깅이 불가능하다. 인라인 함수의 장점 1. 단순 치환이므로 빠르다. 2. 메모리 공간을 차지하지않는다. 3. 디버깅이 가능하다. 4. 타입을 인식하기 때문에 실수할 일이 적어짐. 5. 복잡한 함수를 만들기 용이하다. (그냥 함수랑 똑같이 작성하면 됨) 인라인 함수의 단점. 1. 호출되는 곳마다 함수의 본체가 삽입되므로 실행파일의 크기가 커진다. 인라인 함수가 일반함수가 되..

    타입 캐스팅

    타입을 변경하는 것. C스타일 형변환 강제 형변환이다. (int)'A' 처럼 쓴다. 형변환이 불가능해도 경고가 나지 않으니 주의해야한다. 만약 잘못쓰면 힙이 오염된다. static_cast 컴파일타임에 확인할 수 있는 요소를 고려해 캐스팅을 하는 것.(정적) 논리적인 형변환을 해준다. 예를들어, 1. int* 를 int로 형변환하는 것을 막아준다. 2. 부모와 자식사이가 아닌 클래스끼리의 형변환을 막아준다. (상속확인) 하지만 2번에서, 뭐가 부모고 뭐가 자식인지는 신경쓰지 않고 형변환을 진행한다. 즉, 위험한 상황이 발생할 수 있다. 왜냐하면 부모는 A,B의 기능을 가지고 있고 자식은 A,B,C,D의 기능을 가지고 있는데 부모를 자식으로 형변환한다하면, 부모에게 없는 기능인 C,D를 사용하려고 했을때 ..

    비트연산으로 flag주기

    프로그램을 개발하다보면 enum이라는 녀석을 사용하게된다. 주로 무언가를 구분하거나 옵션을 제공할때 쓰이는데 여기서는 옵션을 제공할때를 살펴보자. MOVABLE(움직일 수 있는), ATTACKABLE(공격할 수 있는) 이라는 두가지 옵션을 한꺼번에 제공해야한다면 어떻게할까? enum STATE { MOVABLE, ATTACKABLE, MOVABLE_AND_ATTACKABLE, END } 이렇게 사용할 수는 있다. 그러나 매번 이렇게 따로 항목을 추가하는건 번거롭다. 이럴때 사용할 수 있는게 비트연산이다. #define DT_TOP 0x00000000 #define DT_LEFT 0x00000000 #define DT_CENTER 0x00000001 #define DT_RIGHT 0x00000002 #de..