"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > `std::cout은 왜 하는가?

`std::cout은 왜 하는가?

2024년 11월 18일에 게시됨
검색:886

Why does `std::cout

f의 흥미로운 사례; 출력에서 항상 1을 인쇄하는 이유는 무엇입니까?

괄호(f;) 없이 함수를 호출하고 그 결과를 std::cout으로 인쇄하면 일관되게 숫자 1이 생성되는 특이한 동작에 직면하면 의문이 생길 수 있습니다. 처음에는 코드가 함수 포인터를 인쇄할 것으로 예상할 수 있지만 관찰 결과에 따르면 그렇지 않은 것으로 나타났습니다.

아래 코드를 자세히 살펴보세요.

#include 
using namespace std;

void pr()
{
    cout 

우리는 그 pr; 기술적으로 pr() 함수를 호출하지 않습니다. 대신 함수 포인터가 cout에 전달됩니다. 이 프로세스 중에 함수 포인터가 bool로 변환되면 0이 아닌 값이 true로 평가되는 논리 표현식과 유사하게 동작합니다. 이는 인쇄되면 1로 변환됩니다.

게다가 C 11 이전 표준에서는 함수 포인터 스트리밍을 허용하는 오버로드가 없습니다. 이로 인해 std::cout을 사용하여 함수 포인터의 형식을 직접 지정하고 인쇄하는 것이 어려워졌습니다. 그러나 C 11의 출현으로 이를 달성하기 위해 사용자 정의 오버로드를 정의할 수 있습니다.

template 
std::ostream & operator

이 오버로드를 사용하면 cout

(func_ptr=
)(num_args=0)

이 사용자 정의 오버로드는 다양한 개수의 함수 포인터 인쇄를 보여줍니다. 함수 포인터 문제를 완화하지만 원하는 오버로드를 지정하는 것이 필수적인 오버로드된 함수 또는 함수 템플릿과 관련된 시나리오를 완전히 해결하지는 않습니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3