암시적/명시적 생성자 쓸 때 주의할 점 공유
279
投稿した質問数 3
explicit을 붙였다고 방심할 수 없네요.. type이 다른 암시적/명시적 생성자가 섞여 있을 때 실수할 수 있으니 주의하세요

위와 같이 'int형 암시적 타입변환 생성자'와 'float형 명시적 타입변환 생성자'를 만들었습니다.

원래 k7 생성 시, Knight k7(1.76f);를 사용해야하지만, 이 코드대로 실행 시 k7과 HelloKnight(8.7f)이 아무 문제 없이 생성/실행됩니다.

어셈블리를 까보니 'int형 암시적 생성자'를 생성자로 사용하네요. 컴파일러가 'float형 암시적 생성자'를 찾으려다 못찾으니, 강제로 int로 형변환하여 'int형 암시적 생성자'를 사용한 겁니다.
명시적 생성자를 써야하는데( Knight k7(1.76f) ), 인간의 실수로 인해 예상치 못한 강제 형변환을 경험할 수 있으니 주의하세요~
回答 1
0
안녕하세요, 인프런 AI 인턴입니다.
박정민님, C++에서 생성자를 사용할 때의 주의사항에 대해 공유해주셔서 감사합니다. 명시적(explicit) 생성자를 사용함에도 불구하고, 다른 타입의 암시적 타입 변환 생성자와 섞일 때 발생할 수 있는 실수에 대한 경고는 매우 중요한 포인트입니다. 특히, ‘float형 명시적 생성자’와 ‘int형 암시적 생성자’ 사이에서 발생하는 자동 형변환이 개발자의 의도와 다르게 동작할 가능성을 잘 보여줍니다. 이런 경우, 개발자는 타입 변환에 더욱 주의를 기울여야 하며, 명시적 생성자를 사용함으로써 타입 안정성을 확보하는 것이 중요합니다.
또한, 어셈블리 언어를 통해 실제로 어떤 생성자가 호출되는지 확인하는 접근법은 문제의 원인을 깊이 있게 이해하는 데 도움이 됩니다. 이를 통해 컴파일러가 타입을 강제 변환하여 예상치 못한 생성자를 호출하는 문제를 발견할 수 있습니다. 개발자로서는 이런 세부적인 동작 방식을 이해하고 있어야, 더 안정적이고 예측 가능한 코드를 작성할 수 있습니다.
코드의 안정성과 명확성을 위해 명시적 생성자 사용 시 주의를 기울이는 것이 좋으며, 이러한 주의사항을 공유해주셔서 감사합니다. C++ 개발에 있어서 이러한 지식이 더 나은 코드 작성으로 이어지기를 바랍니다.
소스코드와 관련하여 질문드립니다
0
65
1
map 컨테이너의 emplace 함수에 대해
0
107
2
시작이 안되네요...!
0
95
2
EAX 명령어 실행 시 RAX의 상위 32비트가 초기화 되는 이유
0
124
1
리틀 엔디안 장점 질문합니다.
0
129
1
메모리 창에 주소를 넣었는데 영어 꺠짐
0
124
1
타입변환#2 build시 knight 인접 stack이 침범당했다는 error가 발생합니다.
0
93
2
map #1 8분 58초 맵은 레드블랙트리로 이루어진 것 같습니다.
1
138
2
hello world 부터 오류 ㅠㅜ
0
185
1
지역변수가 스택? 레지스터
0
126
2
마지막 문제 질문드립니다.
0
162
2
메모리창이 비활성화됩니다.
0
98
1
이중포인터 강좌 부분 질문있습니다.
0
145
1
2를 더하는 이유
0
131
1
메모리 주소 창 엔디안 질문 드립니다. 인프런 봇 답변도 괜찮습니다
1
109
1
해당 코드는 왜 오류가 날까요?
0
153
1
마지막 문제 질문 있습니다.
0
115
1
강의 마지막부분에 질문이 있습니다.
0
190
2
Field초기화
0
140
1
virtual과 override 차이
0
312
2
3:30 참조자 리턴
0
165
1
map 찾기
0
155
1
프로그램 질문드려요
0
255
1
캐스팅 질문
0
135
1

