인프런 커뮤니티 질문&답변
함수 포인터 질문
작성
·
235
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 이 가리키는 함수의 메모리 주소를 정상적으로 출력할 수 있는 것입니다.






감사합니다