C++:class 内的静态数组大小未知
C++: static array inside class having unknown size
我不熟悉这个。我在 google 上搜索了它,但没有找到我的答案。所以,发布我的问题。
刚刚尝试了以下程序:
#include <iostream>
class test
{
static char a[];
static int b[];
};
int main()
{
test t;
}
它在 MSVS 2010 和 g++ 4.8.1 上编译正常,没有任何警告。它还可以在 C++14 编译器中正常编译。 (查看现场演示 here.)那么,C++ 标准在哪里说明了这一点?如果我在测试 class 中从 char 数组的声明中删除静态关键字,当我在 g++ 中使用 -pedantic-errors
命令行选项和在 MSVS 中使用 /Za
选项时,编译器会给出错误 ISO C++ forbids zero size array
2010 编译器显示 error C2133: 'test::a' : unknown size
。所以,我的问题是:
1) 未知大小的静态数组有什么用?
2) 我以后如何指定它们的大小并访问该数组元素?我真的很困惑。
3) 为什么去掉static关键字会导致编译错误?
如果有人用简单的例子来解释就更好了。
谢谢。
编译器不关心大小。它只是静态字段的声明,所以告诉它你有一个数组就足够了。此时大小并不重要。
此时您只有静态字段的声明。你从不使用这些数组,编译器是宽容的……它不会抱怨。
但是,如果您想使用它们,则需要定义。如果您在此处省略尺寸,您将收到与之前看到的类似的错误消息。
没有什么特别的事情发生。
我不熟悉这个。我在 google 上搜索了它,但没有找到我的答案。所以,发布我的问题。 刚刚尝试了以下程序:
#include <iostream>
class test
{
static char a[];
static int b[];
};
int main()
{
test t;
}
它在 MSVS 2010 和 g++ 4.8.1 上编译正常,没有任何警告。它还可以在 C++14 编译器中正常编译。 (查看现场演示 here.)那么,C++ 标准在哪里说明了这一点?如果我在测试 class 中从 char 数组的声明中删除静态关键字,当我在 g++ 中使用 -pedantic-errors
命令行选项和在 MSVS 中使用 /Za
选项时,编译器会给出错误 ISO C++ forbids zero size array
2010 编译器显示 error C2133: 'test::a' : unknown size
。所以,我的问题是:
1) 未知大小的静态数组有什么用?
2) 我以后如何指定它们的大小并访问该数组元素?我真的很困惑。
3) 为什么去掉static关键字会导致编译错误?
如果有人用简单的例子来解释就更好了。
谢谢。
编译器不关心大小。它只是静态字段的声明,所以告诉它你有一个数组就足够了。此时大小并不重要。
此时您只有静态字段的声明。你从不使用这些数组,编译器是宽容的……它不会抱怨。
但是,如果您想使用它们,则需要定义。如果您在此处省略尺寸,您将收到与之前看到的类似的错误消息。
没有什么特别的事情发生。