{ static_cast 와 dynamic_cast 는 키워드에서 부터가 정적과 동적 캐스팅이라는 느낌이 온다. static_cast 는 문법상 형변한이 가능하다면(C++의 문법) 그냥 형을 변환시킨다. dynamic_cast 는 문법상 형변환이 가능하더라도, 실제로 형 변환이 가능한가를 런타임에 검사를 한다. 이런 차이가 있기 때문에, static_cast 가 더 빠른 장점이 있지만, 위험한 단점이 있다. 책에서의 한 구절을 옮기면 "전기세 아끼려고 불끄고 공부하다가 눈 나빠진다"라는 말(물론 내가 좀 바꾸었지만)이 있다. 그리고 dynamic_cast 를 써야 한다면, 기반 클래스의 인터페이스가 무척 부족한 것이므로, 한번쯤 디자인에 대해서도 고려를 해봐야 될 듯 싶다. 아참 dynamic_cast ..
분류 전체보기 검색 결과
{ 필요할 때도 있긴 하지만, 극히 드물기 때문에, 역시 자제하는게 옳다고 생각 한다. 책의 내용 중 "거짓말은 다리가 짧다(독일속담)" 이라는 구절이 있다. reinterpret_cast 는 바로 거짓말과 같다.(그래서 때론 필요할 떄가 있는것 이다. ㅋ) 이 거짓말은 컴파일러의 눈과 귀를 막고, 프로그래머의 횡포를 보고있는 것과 같은 것이다. 대표적으로 reinterpret_cast 는 비트 패턴을 바꾸어 버리거나 재해석하기도 하는데, 책에는 없지만, 이런 예제를 만들어 봤다. #include class ikpil { public: ikpil() : a(0) { } void draw() { std::cout
{ 메모리에 의존한 표현 방식은 플랫폼에 따라서 달라지기 때문에, 너무 연연해 하지 말고, 타입에 의존하여 코드를 짜는게 좋다는 이야기이다. 음.. 그렇다고 해도 타입에 너무 의존해도 큰 코 다치더라. 리눅스와 윈도우에서 돌아가는 서버를 만들고자 할 때 윈도우용 타입을 사용하면 리눅스에서 컴파일이 안되기 때문이다. 이럴 경우에는 고유한 C++ 타입만 사용하면, 문제는 없다. 그래도 여전히 문제가 있는데, 64비트와 32비트와 32비트일 때 이다. 자세한 것은 링크로 대체한다. 검색어 : 32bit 64bit 변수 주의 }
{ 타입을 변환해야지만 가능하다면, 애초에 다형성을 활용해서 짜는게 더 좋지 않겠냐는 이야기이다. 이런 이야기는 무척 많이 들어온 터러 간략하게 말해도 정리가 된다. 그리고 타입의 변환보다 다형성이 코드를 보다 독립적으로 구성 시킬 수 있기 때문에, 타입변환 대신 다형성을 사용하는게 더 편하다. 대표적인 예로, 도형 클래스가 있고, 각 도형 클래스는 자신을 그린다고 하자. 그리고 각 도형을 인자로 받아, 아이디 별로 분기 시켜서 그린다고 했을 때 다음과 같은 코드가 나온다. #include enum eFigure { RECTANGLE, TRIANGLE, CIRCLE }; class CRECTANGLE { public: void Draw() { // 사각형을 그린다. } }; class CTRIANGLE ..
{ 올바른 함수객체를 만들고자 할 때, 일반론으로 만들면 된다. 이때 추가적으로 알아두면 좋은게 있는데, 표준 알고리즘을 사용하다 보면, 특정한 typedef를 요구하는 것들이 있다. 이런 것들을 염려했을 때 unary_function, binary_function 를 고려해 보는게 좋을 것이다. 구글에게 물어보면 자세히 알려 주므로 생략~ 아 생각해 보니까 나는 이것을 잊어 먹었다. 왜냐하면 bind 만 사용하면 손 쉽게 해결 하기 때문이다. }
{ 알고 있겠지만, 함수 객체는 더 빠르게 작동 할 건덕지가 있다. 물론 bind 류 들은 빠른 성능과는 거리가 멀지만 말이다. 테스트를 하면 금방 알수 있으니, 직접 코드를 짜 보는게 좋다. 관련링크 http://ikpil.com/701 }
최근댓글