깊이 탐색 C+대상 모델 의(5)

=====================================================================
마음 에 들 면 주목 하 세 요:Jelly Think|사상의 젤리
더 많은 오리지널 하 이 라이트 블 로그,www.jellythink.com
시 나 웨 이 보 에 도 관심 을 가 질 수 있 습 니 다.http://weibo.com/u/1887014677 =====================================================================
구조 함수 가 정의 하 는 암시 적 변환 을 방지 하기 위해 explicit 를 사용 합 니 다.
그 역할 을 이해 하려 면 먼저 암시 적 전환 을 알 아야 한다.하나의 실제 인삼 으로 호출 할 수 있 는 구조 함수 로 형 삼 유형 에서 이런 유형의 암시 적 전환 을 정의 할 수 있다.
예 를 들 면:
4.567913.여기 things 의 구조 함 수 는 하나의 실제 인삼 으로 만 초기 화 할 수 있 습 니 다.그래서 암시 적 전환 을 할 수 있 습 니 다.아래 와 같이:
class things
{
    public:
        things(const std::string &name = ""):
              m_name(name),height(0),weight(10){}
        int CompareTo(const things & other);
        std::string m_name;
        int height;
        int weight;
};

이 프로그램 은 things 에 실제 참 여 된 CompareTo 함수 로 string 형식 대상 을 사용 합 니 다.이 함 수 는 원래 tings 대상 을 실제 인삼 으로 해 야 합 니 다.현재 컴 파일 러 는 string nm 를 사용 하여 하 나 를 구성 하고 초기 화 합 니 다.
things 대상,새로 생 성 된 임시 things 대상 은 CompareTo 함수 에 전달 되 고 이 함 수 를 떠 난 후에 분 석 됩 니 다.
이런 행위 의 정확 여 부 는 업무 수요 에 달 려 있다.만약 당신 이 단지 a 의 무게 와 10 의 크기 의 비 교 를 테스트 하고 싶다 면,이렇게 하 는 것 이 아마도 편리 할 것 입 니 다.그러나 CompareTo 함수 에서 초기 화 를 0 으로 나 눌 height 속성 이 언급 되 어 있다 면 잘못된 것 일 수 있 습 니 다.구조 tings 이후 height 속성 을 0 으로 변경 해 야 합 니 다.그래서 이런 암시 적 유형 전환 을 제한 해 야 한다.
이 럴 때 구조 함 수 를 explicit 로 설명 함으로써 암시 적 형식 전환 을 방지 할 수 있 습 니 다.
explicit 키 워드 는 클래스 내부 의 구조 함수 성명 에 만 사용 할 수 있 으 며,클래스 외부 함수 정의 에 사용 할 수 없습니다.지금 things 류 는 이렇게:
things a;
................//          。
std::string nm = "book_1";
//        ,          
int result = a.CompareTo(nm);

이 때 컴 파일 을 진행 합 니 다.vs 2010 에 서 는 이 변환 을 실행 할 사용자 정의 변환 연산 자가 없 거나 이 연산 자 를 호출 할 수 없습니다.이 때 구조 함 수 를 사용 하여 위의 형식 변환 을 완성 할 수 있 습 니 다.
class things
{
    public:
        explicit things(const std::string &name = ""):
              m_name(name),height(0),weight(0){}
        int CompareTo(const things & other);
        std::string m_name;
        int height;
        int weight;
};

구 글 의 c++규범 에서 언급 한 explicit 의 장점 은 시기 에 맞지 않 는 유형 변 화 를 피 할 수 있 고 단점 이 없다 는 것 이다.따라서 구 글 은 모든 단일 매개 변수의 구조 함 수 를 표시 해 야 한다 고 약 속 했 습 니 다.극소수의 경우 에 만 구조 함 수 를 복사 하여 explicit 라 고 부 르 지 않 을 수 있 습 니 다.예 를 들 어 다른 종류의 투명 포장 기로 서 의 클래스.
effective c++에 서 는 explicit 로 알려 진 구조 함수 가 non-explicit 형제 보다 더 인기 가 많다 고 합 니 다.컴 파일 러 가 예상 치 못 한 형식 전환 을 금지 하기 때문이다.구조 함수 가 암시 적 형식 으로 전환 되 는 것 을 허용 하 는 좋 은 이유 가 있 지 않 으 면,나 는 그것 을 explicit 로 설명 할 것 이다.나 는 네가 같은 정책 을 따 르 도록 격려 한다.
2012/1/3 위 동 연 대련
=====================================================================
마음 에 들 면 주목 하 세 요:Jelly Think|사상의 젤리
더 많은 오리지널 하 이 라이트 블 로그,www.jellythink.com
시 나 웨 이 보 에 도 관심 을 가 질 수 있 습 니 다.http://weibo.com/u/1887014677 =====================================================================

좋은 웹페이지 즐겨찾기