나는 이것을 이해할 수 없다.
int main() {
int (*) (int *) = 5;
return 0;
}
위의 할당은 g ++ c ++ 11로 컴파일됩니다. 나는 그것이 as 인수 int (*) (int *)
를 받아들이고 (int *)
int를 반환하는 함수에 대한 포인터 라는 것을 알고 있지만 그것을 5와 동일시 할 수있는 방법을 이해하지 못합니다. 처음에는 이것이 지속적으로 5를 반환하는 함수라고 생각했습니다. F #, 아마도, haha), 잠시 함수 포인터가 메모리 위치 5를 가리키고 있다고 생각했지만 명확하게 작동하지 않으며 16 진수 값도 마찬가지입니다.
함수가 int를 반환하고 int를 할당하는 것이 (어쨌든) 괜찮 기 때문일 수 있다고 생각하면서 다음을 시도했습니다.
int * (*) (int *) = my_ptr
여기서 my_ptr
형이고 int *
, int 형인 제 경우와 같이이 2 함수 포인터와 같은 형태. 이것은 컴파일되지 않습니다. 대신 5 또는 int 값을 할당하면 my_ptr
이 함수 포인터에 대해서도 컴파일되지 않습니다.
그렇다면 할당은 무엇을 의미합니까?
업데이트 1
베스트 답변에 표시된 것처럼 버그임을 확인했습니다. 그러나 함수 포인터에 할당 한 값에 실제로 어떤 일이 발생하는지 또는 할당에 어떤 일이 발생 하는지는 아직 알 수 없습니다 . 그것에 대한 (좋은) 설명은 대단히 감사하겠습니다! 문제에 대한보다 명확한 설명을 위해 아래 편집 내용을 참조하십시오.
편집 1
gcc 버전 4.8.2 (Ubuntu 4.8.2)를 사용하고 있습니다.
편집 2
사실, 그것을 내 컴파일러에서 작동하는 것과 동일시합니다. std :: string 변수 또는 double을 반환하는 함수 이름과 동일시해도 작동합니다.
2.1 편집
흥미롭게도 포인터가 아닌 데이터 유형을 반환하는 함수에 대한 함수 포인터로 만들면 다음과 같이 컴파일됩니다.
std::string (*) () = 5.6;
그러나 함수 포인터가 포인터를 반환하는 함수에 대한 즉시 컴파일되지 않습니다.
some_data_type ** (*) () = any_value;