2013-05-02 2 views
2

는 오늘 다음 코드를 보았다 : i는 반복자 용기 *i의 유형에 options 저장 포인터입니다iterator에 포인터를 변환하기 위해 변환 연산자를 사용하는 것이 좋은가요?

options.push_back(&*i); 

. 그 결과 &*i 조금 못생긴 내가 궁금해하기 시작했다 : 그것은 *i의 포인터로 변환하는 변환 연산자를 추가하는 것이 좋습니다

인가?

어떻게 생각하십니까?

+6

나는 그것을 피할 것이다. 암시 적 변환은 종종 과부하 해결에서 두통의 원인이되며, 대상이 포인터 일 때 자동으로 개체에 대해 무의미한 내용을 활성화합니다 (예 : if (i)). '& *'는별로 나쁘지 않다. –

+0

@ matteo-italia : 나는 이것에 대해 많이 생각하고 ... 나는 너에게 동의한다. 나쁜 생각이야. – vinipsmaker

답변

2

추악하지는 않지만 위험 할 수 있습니다. 반복자 소스 i이 컨테이너 options 전에 동적으로 할당되고 삭제 된 경우 잘못된 포인터의 컨테이너가됩니다.
그렇지 않은 경우 이는 매우 유효한 코드입니다. 좀 더 쉽게 읽을 수 있도록하기 위해, 당신은 괄호를 추가 할 수 있습니다 : 당신이 모든 코드를 통해이 구문을 사용하지 않는 경우

options.push_back(&(*i)); 

여기 변환 연산자를 사용하지 않을 것입니다.

관련 문제