使用运算符大小初始化数组?

时间:2013-08-08 15:10:48

标签: c++ c syntax sizeof

我有一个我想初始化的数组

char arr[sizeof(int)];

此表达式是否会计算编译时常量或导致函数调用?

5 个答案:

答案 0 :(得分:4)

char arr[sizeof(int)];

就语言而言,它很好,虽然数组只是声明(和定义),但如果它是局部变量则不会初始化。如果在命名空间级别声明它,那么静态零初始化。

请注意sizeof(int)size_t类型的常量表达式;它的值在编译时是已知的。

答案 1 :(得分:0)

这里没有初始化。声明或定义具有sizeof(int)元素的数组没有任何问题,除了对于代码的读者来说可能看起来有些奇怪。但如果这就是你所需要的,那就是你应该写的东西。

答案 2 :(得分:0)

这是初始化:

  char arr[sizeof(int)] = { 'A', 'B', '0', 'F' };

这当然假设sizeof(int)是(至少)4,否则将无法编译。

回答实际(新)问题:

sizeof()是一个编译时运算符。在C ++中[根据标准,一些编译器允许使用C样式的可变长度数组],除了编译时间常量之外,它不会产生任何结果。在C中,使用可变长度数组,它可以变成一个简单的计算(元素的数量*每个元素的大小 - 其中元素的数量是可变部分)。

答案 3 :(得分:0)

这实际上取决于你打算如何使用数组。

sizeof(int)可能因不同的实现而有所不同,因此您只需要小心如何访问数组中的元素。不要假设您的机器上可以访问的元素可以在另一个元素上访问,除非它在C ++标准中指定的最小大小之内。

答案 4 :(得分:0)

sizeof在编译时进行评估,sizeof将在variable length arrays in C99代码或gcc或其他c ++编译器支持{{}}的情况下进行运行时的唯一时间{3}}。所以这段代码是有效的:

char arr[sizeof(int)];

虽然如果它是局部变量,它将不会被初始化。