有没有办法用非const整数初始化数组,或使已有的变量不变,以使它成为一个有效的参数?
bool f( const char s[], const int n )
{
char c[n]; // error: expression must have a constant value
}
有没有办法用非const整数初始化数组,或使已有的变量不变,以使它成为一个有效的参数?
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可能,显然 。 感谢@马特麦克纳布指出这一点。 如果你能等几年,你也许能够编译它在C ++中,太。 同时,使用vector
。
如果你坚持要在C ++“阵列”,你就必须这样做:
char* c = new char[n];
如果你的程序不运行下去,还是就此别过的时候,你甚至可以只是离开它,因为它是又懒得删除。 像Valgrind的工具可能会抱怨,虽然。
根据的来源n
,答案很可能是否定的。 如果n
可以是constexpr
,那么答案是肯定的。
看到这个SO张贴关于constexpr更多信息: 什么时候应该在C ++ 11使用constexpr能力?
n
位于堆栈上。 在这种情况下,编译器需要知道的大小n
在编译时。 您可以通过运营商动态分配内存new
,或者使用std::vector
。