C++์์ ์์์ผ๋ก ์บ์คํ ํด์ ์ธ๋๋ static_cast๋ก ์ผ์๋๋ฐ
C#์์ as์ฐ๋ผ๊ณ ํ๋๋ฐ static_cast์ธ๋๋ ๋น์ฉ์ด ๋น์ทํจ?
C++์์ ์์์ผ๋ก ์บ์คํ ํด์ ์ธ๋๋ static_cast๋ก ์ผ์๋๋ฐ
C#์์ as์ฐ๋ผ๊ณ ํ๋๋ฐ static_cast์ธ๋๋ ๋น์ฉ์ด ๋น์ทํจ?
static_cast๋ ๋ค์ด์บ์คํ ๋ชปํจ์
ํน์ dynamic_cast๋ฅผ ๋ง์ํ์ ๊ฑฐ์ ์ง? ์๋๋ฉด C์คํ์ผ ์บ์คํ ์ด๋?
?? dynamiccast๊ฐ ๋ค์ด์บ์คํ ๋ชปํ๋๊ฑฐ ์๋? static cast ์ฐ๋ฉด์ ํ๋ฒ๋ ๊ด๋ จ ์ค๋ฅ๋ฅผ ๊ฒช์์ ์ด ์๋๋ฐ ๋ญ์ง?
์ฅ? ์คํํฑ ์บ์คํธ๋ ํ์ ์ฒดํฌ๋ฅผ ์ํด์ ์๋ชป๋ ํ์ ์ด๋ฉด UB์ธ๋ฐ ์ปดํ์ผ๋ฌ๊ฐ ์๋๋ ์ ๋์์ค?
ใด ์์๊ด๊ณ ์๋๋ฉด ์๋์ ๋์์คฌ๋๊ฑธ๋ก ๊ธฐ์ตํจ ์๋ชป๋ ํ๋ณํ์ด๋ผ๊ณ
https://sexycoder.tistory.com/15
์ฌ
๋ณด๋๊น dynamic์ด ๋ชปํ๊ณ static์ ๊ฐ๋ฅํ๋ค๊ณ ๋์ค๊ธดํ๋ค ๊ทผ๋ฐ ๋ด๊ฐ ์๊ณ ์ถ์๊ฑด as๋ ๋น์ฉ์ฐจ์ด์ธ๋ฐ ๋น์ฉ์ฐจ์ด๊ฐ ์๊ณ ์ถ์
ํ์ ๊ทธ๋๋ ๊ธฐ๋ณธ์ ์ธ ๋ณด์ฅ์ ํด์ฃผ๋ ์ค ์์๋๋ฐ ์๋ชป์ฐ๋ฉด ๋ป๋๋ ์บ์คํ ์ด์๊ตฌ๋. ์ํผ static_cast๋ ์ปดํ์ผ ํ์ ๋ด์์ ์ฒดํฌํ ์ ์๋ ์ ๋๋ง ์ฒดํฌํด์ฃผ๊ธฐ ๋๋ฌธ์ ๋ฐํ์์๋ ์๋ฌด๋ฐ ์ฑ๋ฅ ํ๋ฝ ์์ C# as๋ dynamic_cast๋ ๋น์ทํ๊ฒ ํ์ ์ฒดํฌ๋ฅผ ํ๊ณ ํ์ ์ด ์ ๋ง์ผ๋ฉด null๋ก ์ถ๋ ฅํ๊ธฐ ๋๋ฌธ์ ๋น์ฉ์ด ์์
๊ทธ๋ผ static_cast๊ฐ์ด ์ธ์์๋ ๋ฐฉ๋ฒ์ ์์? ๊ฑ C์คํ์ผ๋ก (ํด๋์ค) ์ด๋ ๊ฒ ๋ฐ์์ผ๋๋
์์๋ฒํ๋ฐ ์๋ค C์คํ์ผ๋ ํ์ ์ฒดํนํจ. ๋ถ๋ช unsafe ๋ ์ด์ด๋ก ๋์ด๊ฐ๊ฑฐ๋ ๊ต๋ฌํ ํจ์๋ค ์ด์ฉํ๋ฉด ๊ฐ๋ฅํ ๊ฒ ๊ฐ์๋ฐ ๊ทธ๋๋ ์คํ๋ ค ๋ฐํ์ ์ฑ๋ฅ์ด ์คํ๋ ค ๋ ์ํด๋ณด๋๊น ๋ง์ง ์๋ ๊ฒ ๊ฐ์
https://cpp.sh/?source=%23include+%3Ciostream%3E%0D%0Ausing+namespace+std%3B%0D%0A%0D%0Aclass+A+%7B%0D%0Apublic%3A%0D%0A++++virtual+~A()+%7B%7D%0D%0A%7D%3B%0D%0A%0D%0Aclass+B+%3A+public+A+%7B%0D%0Apublic%3A%0D%0A++++virtual+~B()+%7B%7D%0D%0A%7D%3B%0D%0A%0D%0Aint+main()+%7B%0D%0A++++A*+a+%3D+new+B()%3B%0D%0A++++B*+b+%3D+dynamic_cast%3CB*%3E(a)%3B%0D%0A++++(void)b%3B%0D%0A++++return+0%3B%0D%0A%7D
์ ๋ธ๋ก๊ทธ ์ด ์ ๋ ํด๋์ค์ virtual ํ๊ดด์ ์ ๋ง๋ค์ด๋ฌ์ ์๋์๋๊ฑฐ์์