首页 > 解决方案 > 在 C++ 中,所有非成员函数指针的大小是否相同

问题描述

在 C 编程语言中,我们保证函数指针可以合法地转换为不同类型的函数指针并返回而不会丢失数据:

第 6.3.2.3 节第 8 段:

指向一种类型的函数的指针可以转换为指向另一种类型的函数的指针,然后再返回;结果应与原始指针比较。

此规则间接保证sizeof一个函数指针必须与sizeof任何其他函数指针相同,因为不会发生数据丢失。

但是,我很难在 C++ 标准中找到任何类似的段落(如果重要的话,目前正在阅读 C++17 标准)。实际上,我几乎没有提到任何与函数指针显式相关的转换,但既没有conv.ptr也没有basic.compound真正提供任何类似的保证。

我的问题是:C++ 是否提供与 C 相同的保证,即任何(非成员)函数指针可以保存任何其他(非成员)函数指针的值?


我希望找到这个已经被问到的问题,但我能找到的最接近的是C 的类似问题(不能保证与 C++ 的答案相同),以及一堆关于成员指针大小的不相关问题。

强调一下:这并不是问它是否可以工作,因为编译器同时支持 C 和 C++;这是在询问 C++ 抽象机是否正式支持这种相同的转换。

标签: c++language-lawyerfunction-pointerssizeofreinterpret-cast

解决方案



推荐阅读