使用非const函数参数初始化数组

时间:2015-06-24 12:57:21

标签: c++ arrays variable-length-array

有没有办法用非const整数初始化数组,或者使现有变量保持不变以使其成为有效参数?

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

3 个答案:

答案 0 :(得分:1)

不,不是一般情况。请改用vector<char> c(n)

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

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

但是it is possible in C99, apparently。感谢@Matt McNabb指出这一点。如果你可以等几年,你也可以用C ++编译它。同时,使用vector

如果坚持拥有&#34;数组&#34;在C ++中,您必须执行以下操作:

char* c = new char[n];

如果您的程序没有永久运行,或者经常执行此操作,您甚至可以保持原样并且不打算删除。像Valgrind这样的工具可能会抱怨。

答案 1 :(得分:1)

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

有关constexpr的更多信息,请参阅此SO帖子:When should you use constexpr capability in C++11?

答案 2 :(得分:1)

n位于堆栈上。在这种情况下,编译器需要在编译时知道n的大小。 您可以按操作员new动态分配内存,或使用std::vector