从ISO / IEC 14882:2003 8.3.4 / 1:



因此,以下内容不应编译:

#pragma once
class IAmAClass
{
public:
    IAmAClass();
    ~IAmAClass();

private:
    int somearray[0];    // Zero sized array
};

但是确实如此。但是,以下内容:
#pragma once
class IAmAClass
{
public:
    IAmAClass();
    ~IAmAClass();

private:
    int somearray[0];
    int var = 23;     // Added this expression
};

无法编译,并出现以下错误(与预期的一样)(Visual C++)
error C2229: class 'IAmAClass' has an illegal zero-sized array

当代码在函数中时,根据标准,它将永远不会编译。

因此,为什么代码在头文件中以这种方式表现,编译通过或失败的差异似乎取决于语句是否执行零大小数组声明。

最佳答案

如果存在,则“如果存在常量表达式(5.19)”中的关键字为。不是,所以第一个版本可以编译。

但是,仅当这些变体数组是structclass中的最后一个元素时,才允许(和保持理智),在这种情况下,预计它们将根据情况使用分配给该结构的额外空间。

如果在其他元素之前允许使用未知长度的数组,那么其他代码将如何知道在内存中的哪些位置查找这些元素?

关于c++ - 头文件中的C++零长度数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24706911/

10-13 05:02