是否可以从初始化列表中分配给数组?

问题描述

我正在尝试从 C++ 中的初始值设定项列表中分配给数组,如果可能,该怎么做?新版本的 C++ 是否需要实现它?

代码

#include <iostream>
#include <array>
using namespace std;

int main()
{
    int arrayName_A[5];
    arrayName_A = {1,2,3,4,5};
    for (int i=0;i<5;i++)
    {
        cout << "\n Starting checker" << '\n';
        cout << "checked: " << arrayName_A[i] << '\n';
    }
}

解决方法

不,这不可能。您要么必须直接初始化数组:

 int arrayName_A[5] = {1,2,3,4,5};

或使用 std::array 代替:

std::array<int,5> arrayName_A;
arrayName_A = {1,5};
,

你需要在声明数组后立即对其进行初始化,如下所示:

#include <iostream>
#include <array>
using namespace std;

int main()
{
    int arrayName_A[5] = {1,5};
   
    for (int i=0;i<5;i++)
    {
        cout << "\n Starting checker" << '\n';
        cout << "checked: " << arrayName_A[i] << '\n';

        cout << "\n Starting checker" << '\n';
        cout << "checked: " << arrayName_A[i] << '\n';

        cout << "\n Starting checker" << '\n';
        cout << "checked: " << arrayName_A[i] << '\n';

        cout << "\n Starting checker" << '\n';
        cout << "checked: " << arrayName_A[i] << '\n';

        cout << "\n Starting checker" << '\n';
        cout << "checked: " << arrayName_A[i] << '\n';
    }
}
,

数组没有赋值运算符。数组是不可修改的左值。

那是你可能不会写的例子

int a[3] = { 1,3 };
int b[3] = a;

int a[3] = { 1,3 };
int b[3];

b = a;

您可以使用基于范围的 for 循环从初始值设定项列表中设置数组的每个元素,如下面的演示程序所示。

#include <iostream>

int main() 
{
    int arrayName_A[5];
    
    size_t i = 0;
    
    for ( const auto &item :  { 1,5 } ) arrayName_A[i++] = item;
    
    for ( const auto &item : arrayName_A ) std::cout << item << ' ';
    std::cout << '\n';
    
    return 0;
}

程序输出为

1 2 3 4 5 

否则使用具有赋值运算符的标准类 std::array。例如

#include <iostream>
#include <array>

int main() 
{
    std::array<int,5> arrayName_A;
    

    arrayName_A =  { 1,5 };
    
    // or
    
    arrayName_A =  { { 1,5 } };
    
    for ( const auto &item : arrayName_A ) std::cout << item << ' ';
    std::cout << '\n';
    
    return 0;
}

程序输出和上图一样就是

1 2 3 4 5