尝试使用const int std :: array时出错

时间:2018-03-19 15:22:58

标签: c++ arrays c++11 initialization constants

当我尝试使用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;                                                           ^ ~~~~~~~

2 个答案:

答案 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
相关问题