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

这个问题在这里已有答案:

当我尝试使用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 <\ const int,4> vals; ^ ~~~在test.cpp中包含的文件中:1:0:/ usr / include / c /7.3.0/array:94:12:注意:'std :: array <\ const int,4> :: array ()'被隐式删除,因为默认定义不正确:struct array ^ ~~~~ / usr / include / c /7.3.0/array:94:12:错误:'struct std中未初始化的const成员: :array <\ const int,4>'/ usr / include / c /7.3.0/array:110:56:注意:'const int std :: array <\ const int,4> :: _ M_elems [4]'应初始化typename _AT_Type :: _ Type _M_elems; ^ ~~~~~~~

回答(2)

2 years ago

你打算如何为 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;
}

2 years ago

这是因为在定义常量对象时必须初始化它 . 但是使用此声明

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