表达式 fun
和 &fun
的类型是否相同?
考虑以下代码:
template <typename Check, typename T>
void check(T)
{
static_assert(is_same<Check, T>::value);
}
void fun()
{}
check<void(*)()>(fun);
check<void(*)()>(&fun);
cout << typeid(fun).name() << endl;
cout << typeid(&fun).name() << endl;
两个断言都成功了,这表明两个表达式具有相同的类型。然而,typeid
返回不同的结果:
FvvE
PFvvE
为什么会这样?
typeid
返回不同的类型名称? - NPScheck
按值接受参数,而推导出的类型T
将是函数指针。 - songyuanyao