首页 > 解决方案 > 为什么在类定义中不能使用初始化器定义没有大小的数组?

问题描述

像这样的东西(不起作用):

class A {
    int arr[] = {1, 2};
};

我的编译器错误:

a.cpp:2:9: error: flexible array member 'A::arr' in an otherwise empty 'class A'
    2 |     int arr[] = {1, 2};
      |         ^~~

我猜编译器认为这是一个灵活的数组(我不完全理解它是如何工作的)。

如果在类定义(全局或局部变量)之外,这可以正常工作:

int arr[] = {1, 2};

该数组的大小在编译时已知(在本例中为 2)。这是一种用于避免必须指定数组大小的符号,因为编译器只需查看聚合初始化程序中使用了多少元素就可以知道它。当然我可以只输入数字,但我不应该这样做!

标签: c++

解决方案


推荐阅读