我尝试了这个并得到了输出: 空隙
请解释以下代码:
#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 **。 我的意思是函数是一种方法,没有类型。正确的吗?
答案 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)功能也是类型。