C++数组错误:"variable-sized object may not be initialized"



知道为什么这在C++中不起作用吗?我觉得这真的很简单,但我想不通:

int main() {
int arraySize = 5;
char testArray[arraySize] = {'a', 'b', 'b', 'c', 'd'};
}

当我将5硬编码为数组大小时,它工作得很好,但它不喜欢我使用变量名。最终,我想知道如何编写一个函数,从数组中删除重复的字符,但我甚至无法初始化数组。

默认情况下,编译器需要C++和C代码的混合。因此,VLA被启用为一个扩展。可以强制使用纯C++,然后此代码将无法编译。

请注意,msvc支持VLA还不可用的旧C标准,因此在许多多平台项目中,编译器被配置为不使用VLA。

现在这个警告:

可变大小的对象可能无法初始化

基本上说,您已经请求了VLA,并且您正在用5个元素初始化它。arraySize变量可能会在运行时更改为小于5的值,这可能会损坏初始化代码。这就是为什么会报道这一警告。某些初始化可能未完成。

现在,您的问题被关闭为重复,表明C++标准不支持VLA。我重新打开它,因为问题是关于警告什么是不包括在重复。

相关内容

最新更新