【问题标题】:How could I compare C/C99 specifications to C++ specifications?我如何将 C/C99 规范与 C++ 规范进行比较?
【发布时间】:2011-07-11 21:49:52
【问题描述】:

我需要验证我可以以某种方式使用联合。

对于 C99,这个答案就足够了:Union element alignment

C99 - 第 6.7.2.1 节结构和 联合说明符(第 14 段):

一个指向联合对象的指针,适当地 转换后,指向它的每一个 成员(或者如果成员是位域, 然后到它所在的单元), 反之亦然。

有人可以帮我找到 C++ 的等效保证吗?

更一般地说,是否有一个很好的资源来查找 C++ 标准的部分/段落引用,这些引用等同于 C 中的已知功能?

非常感谢。

【问题讨论】:

    标签: c++ c standards specifications c99


    【解决方案1】:

    在 C++ (14882:2003) 中,这分为两段:

    9.5[class.union]/1

    每个数据成员的分配就像它 是结构的唯一成员。

    9.2[class.mem]/17

    指向 POD 结构对象的指针, 使用适当的转换 reinterpret_cast,指向它的 初始成员(或者如果该成员是位域,则指向它所在的单元),反之亦然。

    我还没有听说过这样的 C 和 C++ 之间的交叉引用,正如这个示例所示,它可能很重要。

    【讨论】:

    • 很好的引用。更一般地说,C++ 特别基于 C,因此它不仅可以在源代码级别上互操作,而且在二进制数据处理级别也可以互操作。我们可以期望 C++ union/struct padding/alignment/layout 匹配等效的C 编译器(或编译器的C-only 模式)。不值得研究每一个小方面,特别是因为有一些有意义的 C 和 C++ 之间差异列表,这些差异在移植/互操作过程中确实很重要。
    【解决方案2】:

    仅供参考,如果您想查看 C++ 标准,很遗憾它不是免费提供的。您必须付费才能获得该标准的副本。但是,最终草案(批准之前的那个)可以在线获得:for C++99 http://www.kuzbass.ru:8086/docs/isocpp/,for C++0x http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3092.pdf

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-17
    相关资源
    最近更新 更多