c++ - 定义不确定大小的数组

标签 c++ arrays

<分区>

据我了解,当我们定义一个像 const char argv[SIZE]; 这样的数组时,“SIZE”必须是一个在编译时已知的数字。

但最近我阅读了 AOSP 代码,发现了这个:http://androidxref.com/5.1.1_r6/xref/system/netd/server/NetdConstants.cpp#70

static int execIptables(IptablesTarget target, bool silent, va_list args) {
    /* Read arguments from incoming va_list; we expect the list to be NULL terminated. */
    std::list<const char*> argsList;
    argsList.push_back(NULL);
    const char* arg;
    do {
        arg = va_arg(args, const char *);
        argsList.push_back(arg);
    } while (arg);

    int i = 0;
    const char* argv[argsList.size()];
    ...

似乎 const char* argv[argsList.size()]; 使用的大小仅在运行时已知。这是因为这个数组是在一个函数中定义的,该函数将在堆栈中分配数组,还是因为编译器可以在编译时计算出大小?

最佳答案

正确的术语是可变长度数组 (VLA)。

C++ 语言标准不支持此功能。

C 语言标准在某个时候开始支持它。

内存分配依赖于编译器(即,不受标准规定)。

关于c++ - 定义不确定大小的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42243917/

相关文章:

非固定枚举的 C++11 值?

javascript - 如何仅通过单击按钮来浏览图片(如幻灯片)?

javascript - 由 Array.prototype.fill() 填充的数组的奇怪行为

c++ - 更改矩形大小时重新计算光线追踪/转换成本

c++ - 赋值运算符的定义有缺陷吗?

c++ - 模板化类中模板化函数的显式实例化

javascript - 如何在 Mongoose 上为数组中的每个项目运行函数或单独写入数组对象

java - 当可以使用旧变量时,为什么要创建并使用新变量呢?

c# - 浅拷贝值类型数组的一段

c++ - 边界框碰撞检测算法