c++ - 在 C++ 中,所有非成员函数指针的大小是否相同
问题描述
在 C 编程语言中,我们保证函数指针可以合法地转换为不同类型的函数指针并返回而不会丢失数据:
第 6.3.2.3 节第 8 段:
指向一种类型的函数的指针可以转换为指向另一种类型的函数的指针,然后再返回;结果应与原始指针比较。
此规则间接保证sizeof
一个函数指针必须与sizeof
任何其他函数指针相同,因为不会发生数据丢失。
但是,我很难在 C++ 标准中找到任何类似的段落(如果重要的话,目前正在阅读 C++17 标准)。实际上,我几乎没有提到任何与函数指针显式相关的转换,但既没有conv.ptr
也没有basic.compound
真正提供任何类似的保证。
我的问题是:C++ 是否提供与 C 相同的保证,即任何(非成员)函数指针可以保存任何其他(非成员)函数指针的值?
我希望找到这个已经被问到的问题,但我能找到的最接近的是C 的类似问题(不能保证与 C++ 的答案相同),以及一堆关于成员指针大小的不相关问题。
强调一下:这并不是问它是否可以工作,因为编译器同时支持 C 和 C++;这是在询问 C++ 抽象机是否正式支持这种相同的转换。
解决方案
推荐阅读
- amazon-cloudwatch - 在 CloudWatch Insights 中,如何过滤掉没有解析值的日志条目?
- amazon-web-services - 未调用 API Gateway Authorizer
- php - 使用 MySql 和 xampp localhost 在团队中工作 - 无法更新数据库
- c# - 从 Visual Studio 2019 运行控制台应用程序时如何加载要加载的用户机密文件
- ceph - 无法为 mon ip 推断 CIDR 网络
- php - 为什么我的登录页面上的准备好的语句不起作用?
- amazon-web-services - 如何调试由 CircleCI 编排的 Serverless 生成的 CloudFormation 模板
- c++ - 初始化 LinkedList 时出现编译错误
- laravel - 数据透视表的工厂和播种机
- spring-boot - Schdulers.elastic 不在 Reactor 中创建新线程