c++ - 灵活的数组作为类成员

标签 c++ flexible-array-member

GCC G++ 9

这段代码:

   class foo {
     int bar[] = {111, 123};
   };

产生有关灵活数组初始化程序的错误。但是这个:
   class foo {
     int bar[2] = {111, 123};
   };

正常编译。任何不计算我输入的值的解决方法?

最佳答案

与可以执行的功能不同

int foo[] = { 1, 2, 3 };

当您执行此操作时,编译器将从初始值设定项推断出foo的大小
struct bar
{
    int foo[] = { 1, 2, 3 };
};

你真正拥有的是
struct bar
{
    bar() : foo{ 1, 2, 3 } {}
    int foo[];
};

那是行不通的,因为C++不允许像C这样的灵活数组。

剩下两个选择。首先是您指定大小。这不是最好的解决方案,因为它可能会引入错误,但可以避免动态初始化。第二种选择是使用一种在运行时可以从列表中初始化的类型。例如,一个std::vector可以很好地满足该要求。是的,将有一个动态内存分配,但是由于std::vectorRAII类型,因此您不必担心它,可以使用默认的构造函数和析构函数。

关于c++ - 灵活的数组作为类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59654239/

相关文章:

c++ - OpenCV - 获取 Rtrees 值不起作用 - CopyTo 类型不匹配

c - 灵活的数组成员,不必是最后一个

c - 什么是结构中的灵活数组成员?

c - 为什么灵活数组成员的静态初始化有效?

c++ - 两个 std::atomic 可以成为一个 union 的一部分吗?

c++ - 关于右值引用的一些说明

c# - 拦截与获取Windows版本相关的API调用

c++ - QTableview 问题中的 Qt 自动完成 QCombobox

c - 为结构体中的灵活数组分配内存

c - 灵活的数组成员真的有必要吗?