강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

이정민님의 프로필 이미지
이정민

작성한 질문수

홍정모의 따라하며 배우는 C++

7.9 함수 포인터

함수 포인터 질문

작성

·

234

1

std::function<bool(const int&)> fcnptr = isEven;

cout << fcnptr << endl;

이 방식의 초기화에서는 오류가 뜨고

bool(*fcnptr)(const int&) = isEven;

cout << fcnptr << endl;

이 초기화에서는 오류가 안 뜨는 이유가 궁금합니다. 뜨는 에러 :

E0349 no operator matches these operands

답변 1

1

안녕하세요, 질문&답변 도우미 Soobak 입니다.

 

std::function 객체를 직접 출력하려고 시도하였기 때문입니다.

 

std::function 에는 operator << 가 정의되어 있지 않습니다.
따라서, cout << fcnptr << endl; 이 부분에서 컴파일 오류가 발생합니다.
즉, std::function 객체 자체를 직접 출력하는 것은 허용되지 않습니다.

반면, bool (*fcnptr)(const int&) = isEven; 에서 fcnptr 은 함수 포인터 이며, 함수 포인터는 기본적으로 메모리 주소를 가리킵니다. C++ 표준 라이브러리는 포인터의 주소를 출력하는 operator << 을 지원하기 때문에, fcnptr 이 가리키는 함수의 메모리 주소를 정상적으로 출력할 수 있는 것입니다.

 

이정민님의 프로필 이미지
이정민
질문자

감사합니다

이정민님의 프로필 이미지
이정민

작성한 질문수

질문하기