我刚刚注意到 gcc 关于位域的一个有趣属性。如果我创建struct
如下:
template <int N>
struct C
{
unsigned long long data : N;
};
然后在 amd64 上:
- 用-m64 , 对于 N ∊ <1, 64>,
sizeof(C) == 8
; - 使用-m32,对于 N ∊ <1, 32>,
sizeof(C) == 4
对于 N ∊ <33, 64>sizeof(C) == 8
,.
(与sizeof(unsigned long long) == 8
)。
这似乎最类似于 C99/C++11 uint_fastXX_t
,除了在我的系统上sizeof(uint_fast8_t) == 1
。但是例如,我无法重现与__int128
(总是导致sizeof(C) == 16
)类似的任何东西。
将前面提到的用作C++98 中struct
“穷人”的替代品对您来说似乎是个好主意吗?uint_fastXX_t