在c++类中创建一个不声明其大小的数组

creating an array without declaring its size, in a class c++

本文关键字:声明 数组 一个 c++ 创建      更新时间:2023-10-16

当我创建一个数组而没有在类中声明它的大小时,它不会给出任何错误它工作得很好,但为什么呢?这只发生在类内部,当我在主函数中做同样的事情时,它会给出错误。

class B {
private:
     char array[]; 
public:
    ///.....///
};

看来你的编译器实现了灵活的数组成员(C语言的特性)作为c++的扩展。

在启用标准遵从性的情况下编译程序,会产生以下诊断:

叮当声:

main.cpp:3:11: error: flexible array member 'array' in otherwise empty class is a GNU extension [-Werror,-Wgnu-empty-struct]
     char array[]; 
          ^
main.cpp:3:11: error: flexible array members are a C99 feature [-Werror,-Wc99-extensions]

gcc:

test.cc:3:17: error: ISO C++ forbids zero-size array 'array' [-pedantic]
IBM:

"test.cc", line 3.11: 1540-2887 (S) A flexible array member is not permitted in this scope.
Oracle:

"test.cc", line 3: Error: In this declaration "array" is of an incomplete type "char[]".

PS:注意你使用它的方式在C中也是错误的:在灵活的

之前,你需要至少一个命名的成员。

如果这不是您的程序的要求,那么我建议使用std::vector,因为它的"灵活性"和性能。你不必担心你刚才问的问题:

class B
{
private:
    std::vector<char> array;
public:
    ///......///
}

首先,大小为空的数组是非标准的。同样的代码不能用符合ANSI c++的编译器编译。

您可能使用的是具有允许空数组声明扩展的编译器(可能是gcc/g++)。关闭扩展,你会得到一个编译错误。

要解决这个问题,可以使用std::vector这样的容器。