(대충 썸네일용 사진)
아래의 초기화 방식에서의 차이를 모른다면 꼭 이 글을 읽어 두자!!!
bool bUsedByA = false;
bool bUsedByA{false};
수많은 코드 플러그인들을 분석하고 뜯어보다 임시로 넘어간 의문들이 한 두 개가 아닐 테지만,
그 중에서도 이 부분에 대한 의문은 이 글로써 얼추 해결할 수 있을 것 같아.
위의 초기화 방식은 두 경우 모두 같은 값으로 초기화될거야.
그럼 무슨 차이가 있는 거냐고?
아래 코드로 같은 예시를 하나 더 들어 보자.
float aa = 13;
float a = 13.13f;
int b = a;
int bb{a};
우선 여기서 '=' 으로 초기화하는 방법은 복사 초기화(Copy Initialization)을 사용한 방법이야.
여기서 자료형이 float인 aa라는 변수에 '='를 사용해서 13을 할당해 주고,
암시적인 캐스팅을 통해서
본래 int 타입의 13을 flaot타입으로 변환해.
그리고 '{}'으로 초기화하는 방법은 리스트 초기화(List Initialization)을 사용한 방법이야.
이 방법은 C++11이후의 버전에서 사용할 수 있고,
초기화 해 주는 과정에서 암시적인 캐스팅을 허용하지 않는 경우가 있기 때문에,
좀 더 안전한 초기화를 할 수 있다는 장점이 있어.
여기서 암시적 캐스팅을 허용하지 않는 경우라고 하면,
바로 위의 코드에서
int bb{a}; //a에는 13.13이 들어가있음.
이 부분은 컴파일 에러가 발생하게 되는데,
float 자료형의 a 변수를 int 타입으로 초기화하면
0.13이라는 소수점 이하의 데이터는 손실될 수 있으니
컴파일러는 이 캐스팅을 허락해 주지 않을거야.
그럼 컴파일 에러가 나겠지?
컴파일 에러가 나는데 왜 {}이게 더 좋은 초기화 방법일까?
나는 개인적으로 코딩에 있어서의 에러라는 것은,
나쁜게 아닌 개발자 목숨 여럿을 살리는 좋은 놈이라고 생각해.
당장 에러가 나 준다면 바로 고칠 수 있잖아 ㅎㅎㅎ.
그리고 이러한 엄격한 방식 덕분에
데이터 손실도 방지할 수 있고 코드의 안전성 또한 높여줄 수 있는
장점을 제공받을 수 있어.
그럼 데이터 손실을 감수하고 저 내용 그대로 캐스팅을 하는 방법은 없을까?
물론 있어.
이렇게 내가 의도한 데이터 손실이다~ 라는 것을
명시적으로 적어 주면 우리의 귀여운 컴파일러도 알아듣고
컴파일 에러를 방출하지 않을 거야.
int bb{static_cast<int>(a)};
'static_cast' <= 이놈이 해외 괴물같은 개발자들이 짠 C++ 코드들만 뜯어가며 공부하는 나에겐
되게 자주 보던 형식이었는데 뭐 하는 아이인줄은 항상 모르고 넘어갔었는데 이번 기회에 알게 되어 참
다행이라는 생각이 들어.
후에 이 글을 보게 될 개발자들에게도 도움이 된다면 좋겠어 :D
'UnrealEngine5 > C++' 카테고리의 다른 글
언리얼 엔진 5 (Unreal Engine 5) 하늘&날씨 시스템 Part5 흐린 날씨3(4k) (0) | 2023.09.22 |
---|---|
언리얼 엔진5 (Unreal Engine 5) 하늘&날씨 시스템 Part4 흐린 날씨2(4k) (0) | 2023.09.22 |
언리얼 엔진(UnrealEngine) 5 하늘&날씨 시스템 Part3 흐린 날씨1 (4k) (0) | 2023.09.22 |
언리얼 엔진(UnrealEngine) 5 하늘&날씨 시스템 Part2 태양 (4k) (0) | 2023.09.22 |
언리얼 엔진 5 (Unreal Engine 5) 하늘 & 날씨 시스템 Part 1(4k) (0) | 2023.09.22 |
UnrealEngine 5 C++ Beginner Tutorial (Interactable Prop System) Part 02 (0) | 2023.09.22 |
UnrealEngine 5 C++ Beginner Tutorial (Interactable Prop System) Part 01 (0) | 2023.09.22 |
언리얼엔진 C++을 이용한 기본 플레이어 이동 구현하기 (2) | 2022.09.16 |