C++ this怎么不是成员函数指针?

标签 c++ typetraits

根据以下测试:

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::*() 是函数类型,它返回 Aint 成员,不带任何参数。所以它不是成员函数指针,更不是函数指针。

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/

相关文章:

c++ - STL中的列表如何不存储在连续的内存中?

c++ - QT 串行丢弃数据

C++ 数组函数和操作

c++ - 使用 clang 显式 C++ 模板实例化

c++ - C++17 中已弃用的 std::is_literal_type

c++ - 使用 type_traits 来限制模板成员函数的类型

c++ - 在 .cpp 文件中使用条件类型

c++ - 在现代 C++ 中是否可以将字符串文字作为参数传递给 C++ 模板?

c++ - 检查成员是否在类中声明

c++ - 对函数的 decltype 感到沮丧