是否可以从初始值设定项列表中为数组赋值



我正试图让从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, 2, 3, 4, 5};

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

那就是你可能不会写例如

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

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

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

#include <iostream>
int main() 
{
int arrayName_A[5];

size_t i = 0;

for ( const auto &item :  { 1, 2, 3, 4, 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, 2, 3, 4, 5 };

// or

arrayName_A =  { { 1, 2, 3, 4, 5 } };

for ( const auto &item : arrayName_A ) std::cout << item << ' ';
std::cout << 'n';

return 0;
}

程序输出与上面显示的相同

1 2 3 4 5 

您需要在声明数组后立即初始化它,如下所示:

#include <iostream>
#include <array>
using namespace std;
int main()
{
int arrayName_A[5] = {1,2,3,4,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';
}
}

最新更新