-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
nonstatic 멤버 함수의 포인터 질문
22.08.29 00:11 작성 조회수 221
0
#include <iostream>
using namespace std;
class Some {
private:
static int val_;
int val2_=2;
public:
static int getVal() {
return val_;
//return val2_;
}
int temp() {
return this->val_+this->val2_;
}
};
int Some::val_ = 1;
int main() {
Some s1;
int (Some:: * ptr)() = &Some::temp;
cout << ptr << endl;
cout << (s1.*ptr)() << endl;
return 0;
}
안녕하세요.
위의 코드를 실행시켰을 때
1
3
이라는 결과가 나왔는데요,
ptr을 출력했을 때 1이 나왔습니다.
왜 ptr출력시 1이란 값이 나오는 걸까요? ptr만 출력했기 때문에 혹시 주소가 나올까 생각했는데 값이 나왔고, 또 왜 1이란 값이 나왔는지 잘 모르겠습니다.
답변을 작성해보세요.
0
강민철
2022.08.30
1은 &Some::temp;의 값이 애초에 1이기 때문입니다.
함수의 주소 반환값을 cout 으로 찍어보면 1이 나옵니다.
아래와 같이요.
#include <iostream>
int foo()
{
return 1;
}
int main()
{
std::cout << &foo << std::endl;
return 0;
}
주소값을 찍기 위해서는 printf의 %p를 이용하는 것이 좋습니다.
// #include <iostream>
#include <stdio.h>
int foo()
{
return 1;
}
int main()
{
// std::cout << &foo << std::endl;
printf("%p", &foo);
return 0;
}
이에 대한 이유는 아래 링크에 잘 나와있습니다.
참고 바랍니다.
답변 1