c++ - 作为类成员的灵活数组
问题描述
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 那样的灵活数组。
这让你有两个选择。首先是您指定大小。这不是最好的解决方案,因为它可能会引入错误,但它会让您免于动态初始化。第二个选项是使用在运行时可以从列表中初始化的类型。例如, Astd::vector
可以很好地满足该要求。是的,会有动态内存分配,但由于std::vector
是RAII类型,你不必担心它,可以使用默认的构造函数和析构函数。
推荐阅读
- ios - 是否可以使用 WatchKit/ClockKit 为并发症制作动画?
- c++ - 模板特化导致未定义的引用错误
- php - 在数组 PHP 中添加 2 个数字
- c# - 将 id 设置为身份后,我的 api 的 post 功能不起作用
- swift - 如何显示标签栏控制器?
- c++ - 多定义 C++/C 谷歌测试
- android-studio - 在 CloudReady(Chrominium 操作系统)上安装 Android Studio
- django - 如何在 Postgres 中更改整个数据库的序列
- date - 查询 Dynamics AX 中的日期范围
- azure - 每个事件中心分区键通过捕获将数据发送到 blob 内的不同容器