【发布时间】:2016-04-01 06:37:53
【问题描述】:
根据以下测试:
std::cout << std::is_member_function_pointer<int A::*()>::value << std::endl;
不是成员函数指针,而是常规函数,而this:
std::cout << std::is_member_function_pointer<int (A::*)()>::value << std::endl;
评估为真。我用 gcc 和 msvc 都试过了。这两个声明有什么区别?这些结果正确吗?为什么A::* 周围的括号很重要?
【问题讨论】:
-
运算符优先级。对不起,我第一次发布这条评论是一个讽刺的问题。还没有咖啡。 :( 希望有所帮助。请注意,作为语法规则的结果,C++ 语法仅隐式定义优先级。但总体上存在有效的优先级。
-
即使有优先级,int A::*() 究竟是什么意思?
-
在我看来就像一个返回成员指针的函数。
-
如果你使用像
(int A::*)()这样的括号,你会得到同样的结果吗?是一样的吗(检查typeid)? -
当我将 (int A::*)() 传递给 typeid 时,我得到一个错误 - 需要一个表达式
标签: c++ typetraits