可以使用typeid()来传递函数吗?

时间:2010-06-08 18:26:19

标签: c++

我尝试了这个并得到了输出: 空隙

请解释以下代码:

#include <cstdio>
#include <typeinfo>
using namespace std ;

void foo()
{    }

int main(void)
{
   printf("%s", 
     typeid(foo()).name());// Please notice this line, is it same as typeid( ).name() ?
   return 0;
}

AFAIK: typeid运算符允许在运行时确定对象的类型。

那么,这个示例代码是否告诉我们返回void的函数是**类型 void **。 我的意思是函数是一种方法,没有类型。正确的吗?

3 个答案:

答案 0 :(得分:8)

typeid不适用于对象。它适用于表达式

typeid返回您作为参数提供给它的表达式的类型。表达式可以引用一个对象,也可以引用一个不是对象的东西。您提供了表达式foo()作为参数。此表达式的类型为void。所以,你得到一个引用类型void的结果。 BTW void不是对象类型。

功能确实有类型。如果要将typeid应用于函数本身,则语法为typeid(foo)。函数到指针的转换不应用于typeid的参数,这意味着您应该得到一个引用函数类型本身的结果。同时,typeid(&foo)将为您提供一个函数指针类型ID,它与typeid(foo)不同。

答案 1 :(得分:2)

这告诉你函数返回的类型。

要获取函数本身的类型,您需要:

typeid(foo)       // note the lack of ()

答案 2 :(得分:1)

两个方面都错了。

1)示例代码告诉您调用foo()的结果类型为void。

2)功能也是类型。