size_t size;
cin >> size;
int arr[size];
工作。但是当然这不是可能的,因为它不是常量表达式。那么,为什么呢?如果我们这样做,编译器会占用动态内存并自动为我们释放它吗?(顺便说一句,这在Visual C ++中无效)
-Werror=vla
根据GCC documentation:可变长度自动数组在ISO C99中是允许的,并且作为扩展GCC在C90模式和C ++中接受它们。这些数组是与其他任何自动数组一样声明,但长度为不是常量表达式存储在以下位置分配当包含声明退出。例如:
FILE * concat_fopen (char *s1, char *s2, char *mode) { char str[strlen (s1) + strlen (s2) + 1]; strcpy (str, s1); strcat (str, s2); return fopen (str, mode); }