2014-10-06 5 views
0

산술 삽입기에 대한 기본적인 질문이 있습니다. § 27.7.3.6.2/1 ostream.inserters.arithmetic]형식화 된 출력 산술 삽입 기

브로가 불리언 타입, 긴 부호 부호 긴 긴 긴 긴, 긴 더블 더블 길거나 CONST 무효입니다 *

bool failed = use_facet< 
    num_put<charT,ostreambuf_iterator<charT,traits> > 
    > (getloc()).put(*this, *this, fill(), val).failed() 

문제는 정확한 기능에, 매트 McNabb는 수정 같이 const void*를 입력 포인터에서 변환을 수행하는 것입니다 : 그것은 다음의 코드를 수행하는 것처럼, 포맷 변환이 발생? 예를 들면 다음과 같습니다.

int *ip = new int(1); 
std::cout << ip; //0xaa33fa67 

구현 세부 사항에 관심이 없습니다. 포인터로 산술 결과를 생성하는 함수가 무엇인지 알고 싶습니다. 위의 예에서 put입니까?

+1

포인터가 'long이 아니라'const void *'로 변환됩니다. –

+1

'const void *'로의 변환은 포인터가'operator << (const void *)'로 전달 될 때 발생합니다. –

+0

나는 잘 이해했다. 감사 –

답변

1

비 멤버 멤버/멤버 함수에서 암시 적 변환은 void*입니다. 스트림에 전달 된 후 std::num_put::put()에 전달하여 "%p" 형식 플래그를 사용하는 것처럼 일반 포인터로 출력합니다.

관련 문제