Reading https://en.cppreference.com/w/cpp/language/bit_field https://en.cppreference.com/w/cpp/language/bit_field,下列结论正确吗?
- 相邻位域之间是否没有填充是实现定义的(这在以下情况下读起来不同)https://eel.is/c++draft/class.bit#:位域 https://eel.is/c++draft/class.bit#:bit-field)
- 类对象中位字段的放置是实现定义的
- 位字段内位的位置是实现定义的(尽管 C++20 将有符号整数定义为 2 次补码)。
(对于 C 参见:C 中位域的特征 https://stackoverflow.com/questions/75284185/characteristics-of-bit-fields-in-c)
“这个问题对一种语言的一项特定功能有三个非常明确的要点。因此,获得一个答案会很有帮助
包含问题的所有三点”
逐一解决要点
- 相邻位字段之间没有填充的想法,不能保证 https://stackoverflow.com/q/71202989/645128在当前的 C++ 实现中。
- Yes, C++ 类对象中位字段的放置是实现定义的 https://stackoverflow.com/a/17723903/645128
-
"...there is no guarantee in the standard that bitfields are mapped to adjacent memory regions, although most sensible implementations would do that..."
referenced from... https://stackoverflow.com/a/63176597/645128
简而言之,结论是不能保证 C++ 的各种新规范之间的位域实现是一致的。因此,从一种 C++ 实现到另一种 C++ 实现的可移植性即使不是不可能,也是很困难的,这迫使任何使用它的应用程序都必须查阅支持所使用的 C++ 编译器的规范和其他文档,以确保其关于如何填充的实现(规则),或位域的其他属性被实现。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)