根据以下测试:
std::cout << std::is_member_function_pointer<int A::*()>::value << std::endl;
不是成员函数指针,而是普通函数,而这个:
std::cout << std::is_member_function_pointer<int (A::*)()>::value << std::endl;
计算结果为真。我用 gcc 和 msvc 都试过了。这两个声明有什么区别?这些结果正确吗?为什么 A::*
周围的括号很重要?
最佳答案
int A::*()
是函数类型,它返回 A
的 int
成员,不带任何参数。所以它不是成员函数指针,更不是函数指针。
std::cout << std::is_member_function_pointer<int A::*()>::value << std::endl; // 0
std::cout << std::is_pointer<int A::*()>::value << std::endl; // 0
std::cout << std::is_function<int A::*()>::value << std::endl << std::endl; // 1
括号改变了优先级,int (A::*)()
是A
的成员函数指针类型,返回int
并且不带任何参数。
关于C++ this怎么不是成员函数指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36349595/