Skip to content

[C++] 캐스트 연산자 (static_cast, dynamic_cast, const_cast, reinterpret_cast) #43

@ggjae

Description

@ggjae

C의 타입 캐스팅 (묵시적, 암시적 형 변환)

ex)

int i = 3;
double d = 3.5;
i = double(d);

데이터의 손실이 일어날 수 있기 때문에 문제가 될 수 있다.

일반적으로 아래의 캐스트방법들은 함수<변환할타입>(변환대상)으로 진행된다.

static_cast

컴파일시에 논리적으로 변경 가능한 경우에 변경을 허용한다.
static_cast<변환할타입>(변환대상)으로 강제 캐스팅이 아닌 캐스트 연산자를 이용하여 캐스팅이 가능하다. 업캐스트, 다운캐스트 다 가능

ex) static_cast(3);

static_cast는 논리상 맞지 않는 변환을 막아주는 역할을 합니다.

문제점 : 상속관계에서의 형변환이 안전하지 못하다. (자식을 부모가 대체가능함)

dynamic_cast

dynamic_cast와 static_cast는 아예 다르다. 런타임 중 안정성 검사를 진행하고 상속관계에서의 업캐스트나 변환을 진행시켜주지만, 다른 데이터형 변환은 허용하지 않는다. 가상함수를 이용하면 다운캐스팅도 진행이 가능하다.

const_cast

어떤 값을 const나 volatile로, 또는 그 반대로 변경하는것이 유일한 목적

const로 선언했지만 값을 바꾸어주는 경우 const_cast를 사용한다.

reinterpret_cast

저수준 프로그래밍에서 위험한 데이터형 변환을 안전하게 진행시키기 위하여 사용한다.

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentation

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions