블로그 이미지
fiadot_old

칼퇴근을 위한 게임 서버 개발 방법론에 대한 심도있는 고찰 및 성찰을 위한 블로그!

Rss feed Tistory
Technical Article/펌 2003. 1. 14. 00:54

GDB에서 perl run...

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력해주세요.

Technical Article/펌 2003. 1. 13. 22:08

dumpcode

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력해주세요.

Technical Article/펌 2003. 1. 12. 01:01

해커스쿨 BOF 세미나 2차...

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력해주세요.

Technical Article/펌 2003. 1. 3. 13:52

[펌] setreuid shellcode 작성법 강좌 (n3wb13)

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력해주세요.

Technical Article/펌 2003. 1. 3. 01:20

전세계 워게임 정복을 위한 첫발...

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력해주세요.

Technical Article/펌 2002. 12. 27. 20:30

BOF에 대한 전반적인 사항 및 쉘코드 제작

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력해주세요.

Technical Article/펌 2002. 12. 15. 09:05

[공지] WarGame메뉴에 대한...

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력해주세요.

Technical Article/펌 2002. 12. 13. 17:38

해커스쿨 2차대회

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력해주세요.

Technical Article/펌 2002. 11. 12. 01:48

패킷스니핑 개념이해...

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력해주세요.

Technical Article/펌 2002. 10. 14. 07:21

[C++] reinterpret_cast' static_cast 에 대해서..

제    목  [답변]reinterpret_cast' static_cast 에 대해서..  
작 성 자  이원구(iwongu)   첨 부
파 일  
작성시간  2000-08-10 오전 11:54:16
조 회 수  351

안녕하세요. 이원구입니다.

기존의 C에 있던 cast 연산에는 몇가지 문제가 있었습니다.
예를 들어 다음과 같은 문장을 보면

Data* data = (Data*)pSomething;

여기서 쓰인 cast가 무엇인지 알수 있는 방법이 없습니다. 코드를 보는 사람뿐 아니
라 컴파일러도 알수 없겠죠. 따라서 컴파일러는 무조건 casting을 하게 됩니다. 또
한 후에 아주 긴 코드상에서 cast한 부분만을 보고자 할때도 검색어로 괄호를 넣을수
도 없고 난감하지요.

이러한 몇가지 점을 보완하고 개발자들에게 여러가지 편리함을 주고자 C++에서는 네
가지 cast operator가 정의되었습니다. static_cast, dynamic_cast,
const_cast, reinterpret_cast가 그것입니다.

간단히 설명을 하자면 다음과 같습니다.

static_cast - 기본적으로 기존 C에서 casting하던 것과 같은 역할을 합니다. 따
라서 기존의 C의 casting으로 안되던 것들은 이것으로도 되지 않습니다. 또한
const형을 non-const형으로 cast하는 것 역시 이 연산자로 할수 없습니다.

const_cast - const형 데이터를 non-const형으로 바꾸거나 volatile형을 non-
volatile형으로 cast해 줍니다. 다른 용도로는 사용할 수 없습니다.

dynamic_cast - class들의 inheritance hierachy들 사이를 올바르게 cast하는
데 사용됩니다. 다른 용도로는 사용할수 없습니다. 이 기능은 RTTI(Run-time
Type Information)기능을 참고하시면 도움이 되실 겁니다. 참고로 이 연산자는 올
바로 cast되지 않는 경우에는 null을 return하기 때문에 매우 유용하게 사용됩니
다.

reinterpret_cast - 이 cast는 보통 구현에 따라 다르게 작업을 수행한다고 되어
있습니다. 따라서 이 연산자는 다른 컴파일러에 porting이 어렵다고 되어 있습니
다. 보통 위의 세가지 cast로 불가능한 casting을 할때 사용되며 서로 다른 프로토
타입을 가진 함수 포인터를 casting하는데 주로 사용이 됩니다.

다시 위의 예로 돌아가면

Data* data = const_cast< Data*>(pSomething);
Data* data = dynamic_cast< Data*>(pSomething);
Data* data = static_cast< Data*>(pSomething);

와 같은 문장이 있다면 왜 casting이 필요했는지를 쉽게 이 부분의 코드만 봐도 확인
이 되겠지요. 물론 컴파일러도 좀더 효율적이고 정확하게 컴파일이 가능할테고요.

마지막으로 C++에 관련된 책중에 여러가지 item으로 구성되어 있어서 재밌고 유용하
게 읽을수 있는 책으로

Effective C++, by Scott Meyers, Addison Wesley
More Effective C++, by Scott Meyers, Addison Wesley

가 있습니다. 꼭 한번 읽어 보세요. 그냥 C++책이나 object-oriented 관련 서적
을 읽는 것과는 다른 맛(?)이 있습니다.

그럼 이만...

도움이 되셨나요.

:) iwongu /R /C /S /L
mailto:iwongu@rcsl.inha.ac.kr
http://rcsl.inha.ac.kr/~iwongu
,
TOTAL TODAY