【发布时间】:2017-08-14 11:21:46
【问题描述】:
我最近在玩函数指针,当时我发现std::cout 打印的函数指针的值总是计算为 1。
但是printf() 的情况并非如此,它会打印出预期的结果。
如果有人能解释这种行为背后的原因,那就太好了。
以下是代码示例供参考。
#include<iostream>
using namespace std;
int fun(int a)
{
return 0;
}
int main()
{
cout<<(&fun)<<endl; //always prints 1
printf("%u",&fun); //this prints the expected result
return 0;
}
【问题讨论】:
-
g++: 警告:'int fun(int)' 的地址将始终评估为'true'
-
看起来
cout不知道指向您的函数的指针类型,并将其转换为boolean -
另外,
"%u"不是地址的正确printf()格式说明符,因此是未定义的行为。void *的正确格式说明符是%p,因此您必须转换为void *。 -
如果您使用 printf,您可能需要包含正确的标题
-
哪个编译器
cout打印1?尝试其他编译器上的代码,你会得到不同的结果。我猜是UB。
标签: c++ function-pointers