C++ C++;:类内具有未知大小的静态数组

C++ C++;:类内具有未知大小的静态数组,c++,arrays,static-members,data-members,C++,Arrays,Static Members,Data Members,我不熟悉这个。我在谷歌上搜索了一下,但没有找到我的答案。所以,发布我的问题。 刚刚尝试了以下程序: #include <iostream> class test { static char a[]; static int b[]; }; int main() { test t; } #包括 课堂测试 { 静态字符a[]; 静态int b[]; }; int main() { 试验t; } 它在MSVS2010&g++4.8.1上编译良好,没有任何警告。它在

我不熟悉这个。我在谷歌上搜索了一下,但没有找到我的答案。所以,发布我的问题。 刚刚尝试了以下程序:

#include <iostream>
class test
{
    static char a[];
    static int b[];
};
int main()
{
    test t;
}
#包括
课堂测试
{
静态字符a[];
静态int b[];
};
int main()
{
试验t;
}
它在MSVS2010&g++4.8.1上编译良好,没有任何警告。它在C++14编译器中也可以很好地编译。(见直播演示),C++标准在哪里说?如果在测试类中从char数组的声明中删除静态关键字,编译器会给出一个错误<代码> ISO C++禁止零大小数组< /代码>当我在MVS- 2010编译器中使用G++&<代码> /ZA/COD>选项中的<代码>学究错误命令> /Cord>命令行选项时,它说:代码>错误C2133:“测试::A”:未知大小< /代码>。因此,我的问题是:

1) 未知大小的静态数组有什么用途

2) 以后如何指定它们的大小并访问该数组元素?我真的很困惑


3) 为什么删除静态关键字会导致编译错误

如果有人能用简单的例子来解释,那就更好了


谢谢。

编译器不在乎大小。它只是静态字段的声明,所以告诉它您有一个数组就足够了。在这一点上,大小并不重要

此时只有静态字段的声明。您从不使用这些数组,而且编译器是允许的。。。它不会抱怨的

但是,如果要使用它们,则需要定义。如果您省略了其中的大小,您将得到与以前类似的错误消息


没有什么特别的地方。

为什么删除static关键字会导致编译器错误?因为它是类的定义。在C++中,所有对象都必须具有已知的大小。