항목 3: const?

Oak_Cassia·2022년 9월 13일
0

const의 장점은

  • 의미적인 제약(외부 변경 불가능)

iterator에 cosnt를 붙이면?

  • const 포인터와 같다.

가리키는 대상을 변경하지 못하게 하려면?

  • const_iterator 사용

함수에 다양하게 쓸 수 있다.

  • 반환값
  • 매개변수
  • 상수 함수

    operator 들은 반환 값이 const로 선언되어 있다.

상수 멤버 함수

  • 호출한 데이터의 객체를 변경 불가능
  • 상수 객체는 상수 멤버 함수만 호출할 수 있다.
    아래와 같을 때 상수 객체 생성
    • 상수 객체에 대한 포인터
    • 상수 객체에 대한 참조자로 객체 전달

비트 수준 상수성(물리적 상수성): C++에서 정의한 상수성, (컴파일러?)
논리적 상수성: 프로그래머는 논리적으로 상수성을 생각한 후 프로그래밍

컴파일러 관점에서 코드상에 문제가 없어도
부적절한 데이터 수정이 일어날 수 있다.

const 함수 내 수정이 필요하면 mutable을 사용.

  • mutable은 어디에서나 수정 가능

상수 멤버, 비상수 멤버 함수

코드 중복을 피하고 싶으면?

  • 이상해 보일지라도
  • return const_cast<char&>(static_cast<const MyClass&>(*this)[ind]);
  • 비상수 멤버 함수에서 상수 멤버 함수를 호출하면 된다.
profile
rust로 뭐할까

0개의 댓글