当我尝试使用const int std :: array时,为什么会出现以下错误? 我不得不替换“<”对于错误消息中的“< \”以正确显示它:
#include <array>
#include <iostream>
using namespace std;
int main() {
array<const int, 4> vals;
return 0;
}
test.cpp:在函数'int main()'中:
test.cpp:7:22:错误:使用已删除的函数'std :: array :: array()'
array&lt; \ const int,4&gt;瓦尔斯; ^ ~~~
test.cpp中包含的文件:1:0: /usr/include/c++/7.3.0/array:94:12:注意:'std :: array&lt; \ const int,4&gt; :: array()'被隐式删除,因为默认定义不正确: struct数组 ^ ~~~~
/ usr / include / c ++ / 7.3.0 / array:94:12:错误:'struct std :: array&lt; \ const int,4&gt;'中未初始化的const成员'
/ usr / include / c ++ / 7.3.0 / array:110:56:注意:'const int std :: array&lt; \ const int,4&gt; :: _ M_elems [4]'应该被初始化 typename _AT_Type :: _输入_M_elems; ^ ~~~~~~~
答案 0 :(得分:5)
您打算如何为const int
元素分配数组值?您应该在声明期间初始化它们。
#include <array>
using namespace std;
int main() {
array<const int, 4> vals{1, 2, 3, 4};
return 0;
}
没有任何初始化,您的示例类似于无效的const声明:
const int a;
由于std::array
本身无法更新,我认为以下代码可以更清楚地理解。
#include <array>
using namespace std;
int main() {
const array<int, 4> vals{1, 2, 3, 4};
return 0;
}
答案 1 :(得分:4)
这是因为在定义常量对象时必须初始化它。但是使用此声明
array<const int, 4> vals;
您没有提供初始化程序。
考虑以下计划
#include <iostream>
#include <array>
int main()
{
int x = 42;
std::array<const int, 4> vals = { { 1, 2, 3, 4 } };
for ( int x : vals ) std::cout << x << ' ';
std::cout << std::endl;
return 0;
}
它的输出是
1 2 3 4