定义具有不确定大小的数组

rea*_*esk 7 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()];
    ...
Run Code Online (Sandbox Code Playgroud)

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

bar*_*nos 0

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

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

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

内存中的分配取决于编译器(即,不是由标准规定的)。