首页 文章

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

提问于
浏览
0

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

当我尝试使用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 回答

  • 4

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

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

    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
    

相关问题