这段简单的代码由于某种原因导致编译器显示错误:
#include <iostream>
using namespace std;
int main() {
size_t c_string_length{15};
auto* selection{new char[c_string_length]{"Biggie Smalls"}};
for(size_t i{};i<c_string_length;i++)
cout<<selection[i];
delete [] selection;
return 0;
}
我得到的错误是这样的:
error: invalid use of array with unspecified bounds
14 | char* selection{new char[c_string_length]{"Biggie Smalls"}};
| ^
但是一旦我更换尺寸(由变量给出
c_string_length
) 动态分配的数组的整数 - 比如 15,程序运行得很好并显示预期的输出。
这是为什么?它与使用的数组大小变量的数据类型无关,我使用int进行了检查。
我弄清楚了错误背后的原因。这是因为,对于编译器来说,它有点令人困惑——数组的大小,它应该是常量大小。当简单地使用变量 c_string_length 时,我们暗示大小不是固定的并且可能会发生变化。 解决方法是告诉编译器 c_string_length 是一个常量;通过:
const size_t c_string_length{15};
就是这样,现在编译器确定 c_string_length 是一个常量,可以毫无混淆地使用它。