typedef unsigned int Set[10];
Set set1;
我认为这会创建一个名为set1的Set类型的变量,其中包含320位存储空间吗?
答案 0 :(得分:6)
没有。这将创建一个名为Set
的{{1}}类型的变量,其至少 10个set1
所需的C堆栈上的顺序存储量。
这是多少位?这取决于平台和编译器。您可以通过编写以下内容来打印特定设置中的位数:
unsigned int
答案 1 :(得分:5)
分配的位数(和字节 1 )可能会有所不同。但是,保证为10个整数创建一个sequentiell存储,可以通过set1
引用。
标准说什么?
该标准不会强制字节包含N
位,因为这会使编写没有平台的编译器变得更加困难字节中的N
位。
[open-std.org - n1147.pdf,3.6 / 3]
- 一个字节由一个连续的位序列组成, 其数量是实现定义的。最不重要的一点 被称为低阶位;最重要的一点叫做 高阶位。
定义了一个常量(CHAR_BIT
),用于保存< climits >中 char 中的位数。
由于所有类型都由 N 字节组成,并且 char 在执行sizeof(char)
时保证产生1,我们可以使用此约束来计算任何位任意类型。
#include <climits>
template<typename T>
struct sizeof_in_bits {
enum {
value = sizeof(T) * CHAR_BIT
};
};
std::cerr << "output: " << sizeof_in_bits<unsigned int[10]>::value;
输出:320
如上所述,上述输出是实现定义的。
1 该标准不强制int
的大小为M
个字节。所有明确的状态是int
能够通过-32767
(如果已签名)和32767
来保持至少 0
65535
(如果未签名)。