【问题标题】:How unions are used to avoid type coversion [duplicate]如何使用联合来避免类型转换
【发布时间】:2018-02-17 18:36:15
【问题描述】:

我正在阅读 Bjarne Stroustrup 的《C++ 编程语言》。它关于工会的声明:

“偶尔会故意使用联合来避免类型转换。例如,可能会: 使用 Fudge 查找指针 0 的表示:

union Fudge{
    int i;
    int* p;
};

int main()
{
    Fudge foo;
    foo.p= 0;
    cout<< "the integer value of the pointer 0 is" << foo.i<< ´\n´;
} "

我知道这个代码片段给出了指针 0 的表示。但是它如何避免文本中提到的类型转换?

【问题讨论】:

  • 它使用了一个联合,从而避免了类型转换。
  • 这不是有效的 C++ 代码。我们不就是有这个吗? stackoverflow.com/questions/48843760/…你发帖
  • @NeilButterworth 为什么
  • 因为 C++ 标准是这么说的。
  • std::variant 可能会有所帮助,尽管它可能会增加一些开销

标签: c++ type-conversion unions


【解决方案1】:

它被称为type punning,并且在 C 中明确允许使用联合,但在 C++ 中则不允许。

它可以工作(在 C 中),因为联合的所有成员占用相同的内存,所以实际上没有转换。您只是以不同的方式解释内存的各个部分。

【讨论】:

    猜你喜欢
    • 2020-01-18
    • 1970-01-01
    • 2019-10-04
    • 2014-11-26
    • 2016-06-27
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    相关资源
    最近更新 更多