由于某种原因,这段简单的代码导致编译器显示错误:
#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"}};
| ^
但是,只要我用一个整数(比如15)替换动态分配数组的大小(由变量c_string_length给出),程序就可以正常运行并显示预期的输出。
这是为什么呢?这与所使用的数组大小变量的数据类型无关,我用int检查过了。
1条答案
按热度按时间wwwo4jvm1#
我找到了错误背后的原因。这是因为,对于编译器来说,它有点混乱-数组的大小,应该是常量大小。当简单地使用变量c_string_length时,我们暗示大小不是固定的,可以更改。修复方法是告诉编译器c_string_length是常量;通过:
就这样,现在编译器确信c_string_length是一个常量,并且可以毫无混淆地使用它。