有没有办法用非const整数初始化数组,或者使现有变量保持不变以使其成为有效参数?
bool f( const char s[], const int n )
{
char c[n]; // error: expression must have a constant value
}
答案 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
。