为什么在c++中函数指针地址以bool类型打印
Why function pointer address is printing in bool type in c++?
下面的代码输出1
,但我希望它输出函数add
的地址。出了什么问题?
#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;
}
函数指针不能转换为数据指针。你会得到一个编译器错误,如果你试图分配一个void*
变量。但是它们可以隐式地转换为bool
!
这就是为什么选择operator<<
的bool
过载而不是const void*
过载的原因。
要强制你想要的重载,你需要使用一个非常强的c++强制类型转换,这将使几乎完全忽略静态类型信息。
#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;
}
参见编译器资源管理器
请注意,仅有条件地支持将函数指针转换和处理为数据指针(从c++标准的角度来看)。将它用于除强制转换回同一函数指针以外的任何操作都将产生特定于实现的结果,这在编译器之间可能非常大。
使用的重载是
ostream& ostream::operator<< (bool val);
打印1
作为你的函数指针不是空的
相关文章:
- 为什么在这种情况下,bool 类型的输出等于 0?
- 将“nullptr”分配给“bool”类型.哪个编译器是正确的
- 在 lambda 表达式中自动推导出的类型是什么,用于修改 bool 类型的向量(特殊容器)
- 使用类型"bool"类型的值初始化类型"int &"(非常量限定)的引用是否是一种黑客?
- 为什么 WinAPI 对 BOOL 类型使用 int(32 位)
- 我可以在C++获得非特化的载体<bool>类型吗?
- unordered_map的默认构造函数,bool类型将设置为false
- 这是自动读写bool类型的正确方法吗?
- 当使用自定义trait和bool类型的c++11枚举时,clang的编译错误
- 为什么在c++中函数指针地址以bool类型打印
- c++ ! !转换为bool类型
- 用于排序容器的隐式转换为显式bool类型
- bool类型变量如何存储在内存中?(c++)
- 带bool类型的字符串初始化
- diab 5.7编译器中的逻辑与运算符返回非bool类型
- 为什么包含未使用的bool类型会影响char类型的引用?
- 结构错误表达式必须为bool类型
- 我可以使用' bool '类型或不透明指针指向导出到c的c++函数中的类吗?
- 为什么sscanf不能正常工作与bool类型
- 从布尔值构造具有底层"bool"类型的枚举?