c++ 编译器标记使用数组大小变量的错误

mbzjlibv  于 2023-03-05  发布在  其他
关注(0)|答案(1)|浏览(178)

由于某种原因,这段简单的代码导致编译器显示错误:

#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检查过了。

wwwo4jvm

wwwo4jvm1#

我找到了错误背后的原因。这是因为,对于编译器来说,它有点混乱-数组的大小,应该是常量大小。当简单地使用变量c_string_length时,我们暗示大小不是固定的,可以更改。修复方法是告诉编译器c_string_length是常量;通过:

const size_t c_string_length{15};

就这样,现在编译器确信c_string_length是一个常量,并且可以毫无混淆地使用它。

相关问题