2016-07-03 9 views
-1

나의 첫 번째 이해는 한마디가 터미널의 출력을 가리킨다는 것이지만 그게 맞는지 나는 모른다."cout << cout"이 주소를 출력하는 이유는 무엇입니까?

어쩌면 터미널의 출력이 아니지만 연결되어있는 메모리 주소 일 수 있습니다.

나는 혼란 스럽다. 어떤 설명도 크게 기뻐할 것이다.

편집 :

내가 오른쪽 주소 인 출력은 0x467f84입니다 std::cout << std::cout;합니까?

+2

이 동작을 찾으려면 사용한 코드를 추가하십시오. 또한 OS 및 컴파일러 정보를 추가하십시오. –

+2

[No Repro] (http://coliru.stacked-crooked.com/a/5bf0e1f8affab64b) –

+0

g ++을 사용하여 제목에 설명 된 동작을 얻었으므로 코드로 추가했습니다. 되 돌리는 것이 자유 롭다. (되돌 렸음) ... –

답변

5

전에 C++ 11 std::basic_ios은 스트림을 조건으로 사용할 수있는 비 명시적인 type conversion function to void*을가집니다.

특수 플래그를 사용하지 않는 한 버전 5 이전의 GCC는 빌드되지 않습니다. 즉, operator<< overloadvoid* 인 경우 사용자 동작으로 이어질 때 스트림이 출력 될 때 사용됩니다.

플래그가 -std=c++11 인 C++ 11 모드 이상으로 빌드하는 경우 컴파일러 오류가 발생합니다.