Day5
const의 위치
멤버함수 뒤에 붙이면
void ShowName() const // read-only호출되는 개체를 수정하지 않는 '읽기 전용 함수'임을 나타냄
멤버 함수 앞에 붙이면
const void ShowName() // 반환값이 상수라는 뜻참조값을 반환할 때 자주 붙인다
매개변수에 const
참조값인 매개변수를 받을 때 수정하지 못하도록 막아준다
포인터 const
int *const A = 1; // 포인터 주소는 바꿀 수 없지만 주소 내부 값은 수정 가능하다https://ebs12373.tistory.com/289
template
타입 확정은 컴파일 타임에 - 컴파일 시간이 늘어남(성능)
전방 선언(Forward Declaration)
클래스 전방 선언
- 한 클래스에서 다른 클래스를 포인터(레퍼런스) 변수로 사용할 때 해당 타입이 클래스(또는 구조체)임을 컴파일러에게 알려주는 기능
- = 결국 포인터 변수이기 때문에 컴파일 타임에 주소만 저장하므로 class인지 struct인지만 알려주면 포인터 변수에 메모리 할당하는데는 문제가 없다(include 안해도 됨)
- 포인터 변수가 아닌 다른 자료형 변수는 실제 메모리 할당 크기를 알아야하기 때문에, 해당 변수가 다른 파일에 있다면 반드시 include를 해야한다
.cpp파일에선 include가 불가피하지만,.h파일에선 include를 피할 수 있다.- 요약: header 파일에서 포인터 변수 타입을 컴파일 단계 용으로 구라치는 것
C++ 반환값 최적화(Return Value Optimization)
union
typedef union _LARGE_INTEGER { struct { DWORD LowPart; // 64bit가 없을 시절 32bit 2개 연결해서 썼음 LONG HighPart; } DUMMYSTRUCTNAME; struct { DWORD LowPart; LONG HighPart; } u; LONGLONG QuadPart;}할당받은 메모리 공간을 공유