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::vector
是RAII类型,因此您不必担心它,可以使用默认的构造函数和析构函数。
关于c++ - 灵活的数组作为类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59654239/