Pot*_*ter 16 c c++ bit-manipulation
我只是在检查一个答案,并意识到这CHAR_BIT
不是由我期望的标题定义的,甚至不是#include <bitset>
在新的GCC上.
我真的#include <climits>
只需要获得"功能" CHAR_BIT
吗?
GMa*_*ckG 24
您可能知道,实现是否要包含其他标头是未指定的.这是允许的,但不是强制性的.(§17.4.4.1)因此,您必须明确或了解您的保证.
C++标头必须包含另一个标头的唯一情况是它是否需要另一个标识符.例如,<bitset>
需要包括<cstddef>
用于std::size_t
,因为这是明确的标准说明.(对于这个例子,§23.3.5)
对于反例,请考虑<limits>
.它可以包含<climits>
和定义numeric_limits
内部宏的值,并且经常这样做,因为这对于实现来说是最容易的.但是,所有的标准说是这类话:" 等同于CHAR_MIN
,SHRT_MIN
,FLT_MIN
,DBL_MIN
,等等." 但并没有说它必须以那些方式实施,这意味着<climits>
不必包括在内.
因此,唯一可以保证CHAR_BIT
定义a的方法是通过包含<climits>
或明确声明必须包含它的其他标题.据我所知,没有必要; 一个实现可以自由地在任何需要的地方对代码进行硬编码,例如,包含<limits>
和使用std::numeric_limits<unsigned char>::digits
(这是等效的).
除非你是为DSP编程,否则更好的名字就是8
.POSIX和Windows都需要CHAR_BIT==8
,除了DSP之外,几乎涵盖了所有有趣的目标.(我不会再考虑20世纪70年代的大型机可能是一个有趣的目标,但也许有人会乞求不同......)
<climits>
是C++标准要求CHAR_BIT的地方.即使你碰巧发现它<bitset>
,它也不能保证在那里,所以你最好直接去源头.它不像是包含了什么问题<climits>
.
归档时间: |
|
查看次数: |
9846 次 |
最近记录: |