• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

함수 포인터 질문

24.01.23 20:28 작성 조회수 98

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님의 프로필

Soobak

2024.01.23

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

 

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

 

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

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

 

이정민님의 프로필

이정민

질문자

2024.01.24

감사합니다