[C++] const와 친구들 (const_cast, mutable) : const 찢어버리기

수민·2024년 2월 19일
0

C++

목록 보기
1/2
post-thumbnail

const와 친구들

😎 const

const란, 대상을 변경하지 않는 상수를 의미한다.
관련 설명 참고! - Effective C++을 읽고 정리한 글입니당~

이거 왜 쓰냐?

const가 가지고 있는 상수성.
"외부에서 변경이 되지 않음"이 가지는 속성때문에, 임의로 변경되지 않도록 설정하고 싶을 때 사용하면 좋다.

상수 함수와 비상수 함수

  • 상수 함수
    • 함수 내부에서 객체 변경 불가능
    • 상수 함수만 호출할 수 있다.
  • 비상수 함수
    • 함수 내부에서 객체 변경 가능
    • 상수 함수와 비상수 함수 모두 호출 가능 (but 비상수 함수 우선시)
    • const_cast를 이용해서 오버로딩된 상수함수 호출 가능
void SetParam(int _val) const; 			// A : 상수 함수
void SetParam(int _val);				// B : 비상수 함수

😎 const_cast

const_cast는 캐스팅 연산자로, 상수성(const) 을 제거해준다.
const로 선언된 변수를 가리키는 포인터 변수에 대해, const 변수의 상수성은 유지한 채 포인터만 const 속성을 해제해준다.
원본은 변경하지 않으므로 안전하다.
단, 포인터를 통해 값을 변경한 뒤 원본 값을 새로운 포인터로 넘겨받는다면 바뀐 값이 넘어간다. 주의~!

const_cast 사용 조건

  • const로 선언된 포인터만 const를 풀어줄 수 있다.
  • 포인터가 아닌 일반 변수의 const는 풀어줄 수 없다.
  • 함수 포인터, 멤버 함수에 대한 const는 풀어줄 수 없다.

캐스팅 연산자

캐스팅 관련 개념 참고! - Effective C++을 읽고 정리한 글입니당~

reinterpret_cast

하부 수준 캐스팅 (포인터 -> int 등)을 위해 만들어졌다.
정말 row한 느낌의 캐스팅.

dynamic_cast

안전한 다운캐스팅을 할 때 사용한다.
어떤 객체가 클래스 상속 계통에 속한 특정 타입인지 결정하는 작업에 쓰인다.

런타임 비용이 높으므로, 주의 또 주의해서 사용해야 한다.
웬만하면 사용하지 말 것!

static_cast

암시적 변환을 강제로 진행할 때 사용한다.
주된 사용 예)

  • 비상수 객체 -> 상수 객체
  • int -> double
  • void ->
  • 기본 클래스의 포인터 -> 파생 클래스의 포인터

😎 mutable

상수로 선언된 객체에서, mutable로 선언된 특정 멤버 변수에 대해서는 변경을 허용하겠다는 의미
상수 객체에서 특정 변수만 값을 변경하고 싶을 때 사용한다.

어떠한 const 멤버 함수 안에서, 특정 변수에 대해서는 const가 아닌 작업을 할 수 있도록 해준다.


참고
모두의 코드 : https://modoocode.com/253

profile
우하하

0개의 댓글