提问人:wimalopaan 提问时间:1/30/2023 最后编辑:wimalopaan 更新时间:1/30/2023 访问量:145
C++ 中位字段的特征
Characteristics of bit-Fields in C++
问:
https://en.cppreference.com/w/cpp/language/bit_field 读,以下结论正确吗?
- 相邻位域之间是否没有填充是由实现定义的(这在 https://eel.is/c++draft/class.bit#:bit-field 中读起来不同)
- 位字段在类对象中的位置是实现定义的
- 位域内位的位置是实现定义的(尽管 C++20 将有符号整数定义为 2 分之一补码)。
(对于 C,请参阅:C 中位字段的特征)
答:
2赞
ryyker
1/30/2023
#1
“这个问题有三个非常明确的要点,指向一种语言中的一个特定功能。因此,得到一个答案会很有帮助 包括问题的所有三点”
逐个寻址点
- 相邻位域之间没有填充的想法在当前的 C++ 实现中无法保证。
- 是的,位字段在 C++ 类对象中的位置是实现定义的
-
“......标准中不能保证位域映射到相邻的内存区域,尽管大多数明智的实现都会这样做......“
引用自...
简而言之,结论是,不能保证各种新 C++ 规范之间的位域实现是一致的。因此,从一个 C++ 实现到另一个实现的可移植性是困难的,如果不是不可能的话,强制要求任何使用它的应用程序都必须查阅支持正在使用的 C++ 编译器的规范和其他文档,以确保其实现(规则)关于如何实现填充或位域的其他属性。
评论