gpt4 book ai didi

c++ - 为什么 C++ 位域要求我指定类型?

转载 作者:行者123 更新时间:2023-12-03 10:04:34 24 4
gpt4 key购买 nike

为什么我必须为位域指定类型?

struct MyBitField
{
unsigned int i : 4;
}

struct MyBitField2
{
unsigned char i : 4;
}
这两者有什么区别?为什么我需要指定一个类型?

最佳答案

位域是围绕普通成员的“叠加层”,每个成员都有一个类型。回想一下,C++ 中的整数类型很大程度上继承自 C 中的类型,C 中的类型旨在巧妙地映射到目标体系结构上存在的任何原语。这是一个方便的功能。位域位于该逻辑之上;他们不更换它。
关于此的一些事实:

  • The "special width" of a bitfield does not contribute to its type ;
  • 位域的可用字节数取决于其类型( bits beyond the natural width of the type are considered padding );
  • the semantics of an assignment to a bitfield depend (to some degree) on its type .

  • 类型从根本上支持对象如何在 C++ 中工作,以及如何编码和解释这些对象的值。
    位域功能的设计是否不同?也许,作为语言中不需要特定底层类型的一种单独的一流的东西?
    也许,但是您需要新规则来为每个赋值组合定义位域整数语义(有符号和无符号)和转换规则。重点是什么?我们已经有了可以使用的类型系统。
    在您的情况下,当然,显示的每个对象的语义是相同的。但存在其他位域。你不妨问为什么两者都是 unsigned intunsigned long存在于它们各自范围相同的系统上:我们不会围绕非常具体的情况设计语言。
    如果您想要的只是无类型位的集合,那么 std::bitset<4> 就是你要找的。

    关于c++ - 为什么 C++ 位域要求我指定类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65062636/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com