키워드: const / 참조 바인딩 / 포인터 vs const / top-level & low-level const / typedef·using / auto / std::string / cin·cout / struct·헤더 분리
const의 핵심: “바꾸지 않겠다”는 약속을 타입에 명시한다. 참조·포인터에 얹히면 “무엇을 못 바꾸게 하는가?”가 관건.
레퍼런스는 객체가 아니라 ‘별칭’: 선언과 동시에 반드시 바인딩되며, 다른 대상을 가리키도록 교체 불가. const 레퍼런스는 임시(rvalue)에도 바인딩 가능하여 편리한 인터페이스를 제공.
포인터×const 두 축
pointer to const: const 대상을 못 바꿈.
const pointer: 포인터 자신의 주소 값을 못 바꿈.
→ “const가 누구를 수식하나?”만 보면 헷갈림이 사라진다.
호환 규칙: “바꿀 수 없는 것을 바꿀 수 있는 애에게 넘기면 위험” → 금지. 반대(바꿀 수 있는 것을 못 바꾸는 애에게 넘김)는 안전 → 허용.
top-level vs low-level const: 앞자는 자체 불변성(예: 포인터 자체 고정), 뒤자는 가리키는 대상의 불변성. 호환성 판단의 핵심 기준.
타입 별칭(typedef, using)으로 긴 타입 이름을 간결화. **auto*는 초기값으로부터 타입 추론(단, const 전파 규칙 주의).
문자열/스트림 I/O: >>는 단어, getline은 한 줄, <<는 출력. 헤더·네임스페이스 사용 습관 잡기.
실습 토막: 간단한 Sales_data(또는 Sales_data 유사 구조체)를 헤더 분리해 입력→처리→출력까지.