C++ 형 변환 - static_cast

진경천·2023년 10월 27일
0

C++

목록 보기
58/90

static_cast

형변환은 위험하지만 C스타일의 형변환은 많이 일어난다.
compile 타임에 형변환에 대한 타입 오류를 잡아준다.
암시적인 형 변환

static_cast<바꾸려고 하는 타입>(대상);

예제

class A {

};

class B {

};

int main() {
	A a;
	B* b = (B*)&a;
	// 정의 되지 않은 형 변환임.
}

위 코드에서는 정상적으로 컴파일이 된듯 보이지만
static_cast를 이용하여 잘못된 형 변환을 방지 할 수 있다.

B* b = static_cast(B*)&a;
  • 실행 결과

클래스에서 다양한 형 변환

class Test {
public:
	explicit Test(int num) {
		cout << num << endl;
	}

	explicit operator bool() const {
		return true;
	}
};

enum class Type {
	A, B, C
};

int main() {
	Type type = static_cast<Type>(0);
	cout << static_cast<int>(type) << endl;
    
    Test t(10);
	bool b = static_cast<bool>(t);
	cout << b << endl;
}
  • 실행 결과

    0
    1

explicit 키워드는 자신이 원하지 않은 형변환이 일어나지 않도록 제한하는 키워드이다.

부모가 자식으로 캐스팅 될 때

#include <iostream>

using namespace std;

class Parent {

};

class Child : public Parent {
public:
	int num = 10;
};

int main() {
	Child c;
	Parent& p = c;
	Child& c0 = static_cast<Child&>(p);
	// 가능하지만 위험한 형변환임.
	cout << c0.num << endl;
}
  • 실행 결과

    10

profile
어중이떠중이

0개의 댓글