使用非常量函数参数初始化数组

Initialize array with a non-const function argument

本文关键字:参数 初始化 数组 函数 常量 非常      更新时间:2023-10-16

是否有任何方法可以用非常量整数初始化数组,或者使现有变量为常量以使其成为有效参数?

bool f( const char s[], const int n )
{
    char c[n]; // error: expression must have a constant value
}

没有,一般情况下没有。请改用vector<char> c(n)

简化的、几乎正确的解释:如果在编译时不知道n是什么,编译器也不知道。因此,它不能为数组留出内存。这就是vector存在的原因。

如果在其他地方需要,您可以始终使用&c[0]来获取指向char的指针。

但显然,C99是有可能的。感谢@Matt McNabb指出这一点。如果你能等几年,你可能也能用C++编译它。同时使用vector

如果您坚持在C++中有一个"数组",则必须执行以下操作:

char* c = new char[n];

如果你的程序不能永远运行,或者经常这样做,你甚至可以保持原样,不必麻烦删除。不过,像Valgrind这样的工具可能会抱怨。

根据n的来源,答案可能是否定的。如果n可以是constexpr,那么答案是肯定的。

有关constexpr的更多信息,请参阅这篇SO文章:您应该何时在C++11中使用constexpr功能?

n位于堆栈上。在这种情况下,编译器需要在编译时知道n的大小。您可以通过运算符new动态分配内存,也可以使用std::vector