728x90

포큐아카데미 c++3200강의 내용을 개인학습용으로 정리한 내용입니다.

 

암시적 캐스팅

 

명시적 캐스팅

C스타일 캐스팅은 명확하지 못함.

1. static_cast :: 컴파일시 실수를 잡아줌. 값을 변경해준다. 값 또는 부모-자식관계의 포인터에 쓰임.

2. const_cast :: 형을 바꿀 수 없음. const또는  volatile 애트리뷰트를 제거할 떄 사용

3. dynamic_cast :: 매우 안전하지만 RTTI를 켜놔야 작동함. 켜놓지 않으면 static_const와 동일하게 작동한다. (좋은 기능이지만 성능을 중요시하는 경우에는 쓰기 어렵다.)

4. reinterpret_cast(가장 위험한 캐스팅)

 

 

캐스팅 규칙

 안전한것 -> 위험한것

 1. 기본적으로 static_cast

 2. reinterpret_cast :: 포인터와 비포인터사이의 변환. 서로 연관이 없는 포인터 사이의 변환은 그 데이터형이 맞다고 정말 확신할 때만 할 것

 3. const_cast :: 내가 변경권한이 없는 외부 라이브러리를 호춯할 때만 const_cast를 쓸 것

 

인라인함수

코드의 가독성과 성능을 둘다 잡는?

 

일반적인 함수호출 단계는 CPU캐시에 최적이 아닐수도 있다.

 

매크로와 비슷하나 매크로는 사전처리기에서 처리되는 반면 인라인함수는 컴파일도중 체크된다.

 

매크로는 디버깅하기 힘듦(콜스택에 함수이름 안보임, break point 설정 불가, scope준수(글로벌임) 안됨 등). 정말 매크로를 쓸 이유가 있지 않는 한 인라인 함수를 쓰자!

 

인라인은 항상 적용되는게 아니다! 인라인함수 구현체는 헤더에 있어야 한다.

 

간단한 함수에 적합.

 

실행파일의 크기가 증가하기가 쉬움 (실행파일이 작을수록 오히려 cpu캐시하고 잘 작동될 수도 있다.)

 

결론 : 인라인함수를 사용하여 함수호출의 오버헤드를 줄이고 코드 가독성을 높일 수 있으나, 오히려 실행파일의 크기를 증가시켜 속도가 느려질 수도 있다. 때문에 간단한 함수에 적당히 사용하는게 좋을것 같다.

 

static

-extern

-함수속정적변수 :: 함수 범위 밖에서는 접근 불가능

-정적멤버변수

-베스트프랙티스 :: 1. 함수안에 정적변수를 넣지 말것. 대신 클래스안에 (oop관점에서) 2.전역변수 대신 정적멤버변수 쓸것(범위scope 제한을 하기 위해)

728x90

+ Recent posts