Search Results for '2010/04/25'


1 POSTS

  1. 2010/04/25 이상한 파라미터 by 슴갈 (5)

이상한 파라미터

조금 예전의 코드를 보다가 나중에 검토를 해 보자는 주석이 달린 코드를 보았다.
그리고 그 때 제시된 문제를 간략하게 만들어 보았다
.

#include <stdio.h>

class CRenderMode
{
public:
        explicit CRenderMode(int mode)
        {
               printf("mode = %d\n", mode);
        }
};

int main()
{
        int mode = 0;

        // 아래 것은 출력 안 됨.
        CRenderMode state0( int(mode) );

        // 나머지 3개는 출력 됨
        CRenderMode state_( int((int)mode) );
        CRenderMode state1( int(mode+0) );
        CRenderMode state2( (int)mode );

        return 0;
}

생성자에 파라미터를 넣을 때 int(mode) 라고 하니 원했던 생성자가 안 불렸다는 것인데, 마치 파라미터 없는 생성자를 부를 때 실수로 CRenderMode state0(); 라고 했을 때와 상황이 같다. 이것도 뭔가 스펙이 있는 듯 하지만, 정확한 이유는 모르겠다.

 

 

Posted by 슴갈

2010/04/25 12:45 2010/04/25 12:45
Response
No Trackback , 5 Comments
RSS :
http://avej.com/textcube/rss/response/24

Trackback URL : http://avej.com/textcube/trackback/24

Comments List

  1. 용맨소녀 2010/08/11 01:42 # M/D Reply Permalink

    explicit 가 뭐죠? ㅡ.ㅡ 플머 인생 18년동안 처음보는 단어군요.. (역시 헛살았다는..)

  2. 왕풍뎅이 2010/08/12 15:27 # M/D Reply Permalink

    http://bischoff.tistory.com/202 이거라는뎅 용만앙

  3. 슴갈 2010/08/31 12:36 # M/D Reply Permalink

    왕풍뎅이님 링크를 참조하시면 될 것 같고.... 잘 안쓰일 수도 있지만 꼭 필요한 것 중에 하나입니다. (저의 경우에는, 남이 쓰는 SDK를 만들어야 하는 직업이기에 중요하게 생각하는 키워드 이기도 하고요...)

  4. summerlight 2010/10/23 17:59 # M/D Reply Permalink

    오랜만에 들릅니다.

    위의 경우는 객체 instance의 선언이 아니라 함수 원형을 선언하는 것으로 간주되기 때문에 그렇습니다. 구체적으로는CRenderMode를 반환하고 int형의 인자를 받는 state0라는 함수를 선언한 셈이 되고요. 함수 선언과 객체 instance의 선언 사이의 구분이 서로 모호해서 발생하는 문제죠. C의 유산을 물려 받느라 어쩔 수 없이 발생한 일인 것 같습니다.

    그래서 저는 그냥 명시적으로 static_cast를 씁니다. 타이핑이 좀 길어지더라도 C++같이 위험한 언어에서는 최대한 모호함을 배제하는 것이 맞는 것 같습니다...

    1. 슴갈 2010/11/02 20:50 # M/D Permalink

      그렇군요. 간단하게 g++에서 확인을 해보았는데, 함수 선언의 파라미터로 int(mode) 와 같은 선언이 가능하군요. 처음 알았습니다. 감사합니다.

Leave a comment
[로그인][오픈아이디란?]

블로그 이미지

GP2X WIZ와 CAANNO와 bada용 게임 개발을 하자

- 슴갈

Notices

Archives

Authors

  1. 슴갈

Recent Trackbacks

Calendar

«   2010/04   »
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  

Site Stats

Total hits:
41806
Today:
32
Yesterday:
55