arrays - C ++ 11中的可变长度数组
问题描述
我知道有几个关于可变长度数组(VLA)的问题。我认为一般结论是不支持 VLA。但是下面的代码会编译得很好。任何人都可以解释一下吗?
#include <iostream>
#include <vector>
using namespace std;
void func(vector<int> v){
int arr[v.size()] = {0};
int b = 4;
return;
}
void func2(int n)
{
int arr[n];
}
int main()
{
vector<int> v = {1,2,3};
func(v);
func2(10);
int len = 8;
int arr[len] = {0};
return 0;
}
解决方案
它使用编译器 g++ 4.8.4 和 C++11 显示错误消息“可变大小的对象可能未初始化”。
一些编译器部分支持这种数组定义作为扩展。请参阅此链接。但是,它不是 C++ 标准。
当你在堆栈内存上分配一个数组时,你必须在编译时声明它的长度。如果你想要一个可变长度的数组,你必须在堆内存上分配它。
推荐阅读
- ios - 在 iOS 中显示视图而不是默认通知
- python - 使用指标列的累计天数
- google-sheets - 使用具有多个日期条件和多个 OR 的 COUNTIF
- npm - 我无法登录到 myGet npm 存储库 (sencha/extjs-ce)
- swift - 未解析的标识符“完成”
- javascript - 浏览器中的打字稿产生`ReferenceError:未定义要求`
- sql - 使用 stuff 函数和 xml 路径避免重复
- python - 如何使用条件填充数据?
- ms-word - Word 加载项对话框不反映从父级设置的本地存储值
- android - 三星手机忽略 Captive Portal 意图 (android.net.conn.CAPTIVE_PORTAL)