gpt4 book ai didi

c++ - 为什么在取消引用的函数指针上使用时 std::is_function 的计算结果为 false?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:07:19 25 4
gpt4 key购买 nike

我正在尝试使用 std::is_function 来确定变量是否为函数指针。

运行以下代码时

#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;
}

输出是

PFivE 0
PFivE 0
FivE 1
FivE 0

任何有见识的人都可以解释为什么 std::is_function 的最后一个表达式的计算结果为 false 吗?

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

最佳答案

那是因为 decltype(*pmain) 产生了一个函数类型的 referencestd::function false 如预期的那样。尝试:

is_function<remove_reference<decltype(*pmain)>::type>::value

顺便说一句:ISO C++ 禁止获取::main() 的地址

关于c++ - 为什么在取消引用的函数指针上使用时 std::is_function 的计算结果为 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18598417/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com