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

标签 c++ arrays static-members data-members

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

#include <iostream>
class test
{
    static char a[];
    static int b[];
};
int main()
{
    test t;
}

它在 MSVS 2010 和 g++ 4.8.1 上编译正常,没有任何警告。它还可以在 C++14 编译器中正常编译。 (参见现场演示 here.)那么,C++ 标准在哪里说明了这一点?如果我从测试类中的 char 数组声明中删除静态关键字,当我在中使用 -pedantic-errors 命令行选项时,编译器会给出错误 ISO C++ forbids zero size array MSVS 2010 编译器中的 g++ & /Za 选项显示 error C2133: 'test::a' : unknown size。所以,我的问题是:

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

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

3) 为什么去掉static关键字会导致编译错误?

如果有人能用简单的例子解释一下就更好了。

谢谢。

最佳答案

编译器不关心大小。它只是静态字段的声明,所以告诉它你有一个数组就足够了。此时大小并不重要。

此时您只有静态字段的声明。您永远不会使用这些数组,并且编译器是宽松的……它不会提示。

但是,如果您想使用它们,则需要一个定义。如果您在此处省略尺寸,您将收到与之前看到的类似的错误消息。

没有什么特别的事情发生。

关于C++:类内的静态数组大小未知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32032586/

相关文章:

c++ - 部分模板类型推导

c++ - 在 std::exception 的扩展中调用 what() 后的字符串修改值

c++ - 在 C++ 中使用 map 时,如何在指定范围内使用 for 循环

c - 在数组声明中使用 strlen

c++ - 仅 header 库中静态成员变量的正确 setter 和 getter

c++ - 在我的 void_t 包装器而不是后备上编译时错误

javascript - 这可以变成for循环吗?

c - 从 C 中的多维数组中获取列的有效方法是什么?

c++ - 无法在头文件和源文件中拆分具有静态成员函数的类

c++ - 静态函数输出与普通 fn 输出不同