首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在取消引用的函数指针上使用std::is_function时计算值为false?

为什么在取消引用的函数指针上使用std::is_function时计算值为false?
EN

Stack Overflow用户
提问于 2013-09-03 17:45:04
回答 1查看 511关注 0票数 4

我试图使用std::is_function来确定变量是否是函数指针。

运行以下代码时

代码语言:javascript
复制
#include <iostream>
#include <typeinfo>

using namespace std;

int main() {
    typedef int(*functionpointer)();

    functionpointer pmain = main;

    cout << typeid(functionpointer).name() << " "<< is_function<functionpointer>::value << endl;
    cout << typeid(decltype(pmain)).name() << " " << is_function<decltype(pmain)>::value << endl;

    cout << typeid(decltype(main)).name() << " " << is_function<decltype(main)>::value << endl;
    cout << typeid(decltype(*pmain)).name() << " " << is_function<decltype(*pmain)>::value << endl;

    return 0;
}

输出是

代码语言:javascript
复制
PFivE 0
PFivE 0
FivE 1
FivE 0

任何有洞察力的人能解释为什么std::is_function的最后一个表达式计算为false吗?

(在g++4.7、g++4.8和clang++3.2下测试的代码)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-03 17:54:41

这是因为decltype(*pmain)生成对函数类型的引用,std::functionfalse。尝试:

代码语言:javascript
复制
is_function<remove_reference<decltype(*pmain)>::type>::value

顺便提一下: ISO C++禁止使用以下地址::main()

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18598417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档