海湾合作委员会 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
is an RAII类型,你不需要担心它并且可以使用默认的构造函数和析构函数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)