#include <iostream>
int add(int x, int y) { return x + y; }
int main()
{
int (*func_ptr)(int,int) = add;
std::cout << "The address of function add() is: " << func_ptr << std::endl;
}
#include <iostream>
int add(int x, int y) { return x + y; }
int main()
{
int (*func_ptr)(int,int) = add;
std::cout << "The address of function add() is: "
<< reinterpret_cast<void*>(func_ptr)
<< std::endl;
}
2条答案
按热度按时间bwitn5fc1#
函数指针不能转换为数据指针。如果你试图将一个值赋给一个
void*
变量,你会得到一个编译器错误。但是它们可以隐式地转换为bool
!这就是为什么选择
operator<<
的bool
重载而不是const void*
重载的原因。要强制重载你想要的,你需要使用一个非常强大的C++强制转换,它几乎完全忽略静态类型信息。
字符串
请注意,转换和处理函数指针作为数据指针是有条件支持的(从C++标准的Angular 来看)。除了强制转换回相同的函数指针之外,将其用于其他任何事情都会产生特定于实现的结果,这在编译器中非常重要。
n9vozmp42#
使用的重载为
字符串
将
1
打印为函数指针的函数不为null。