将数组分配给数组

use*_*625 15 c++ arrays

所以我正在玩一些数组,我无法弄清楚为什么这不起作用.

int numbers[5] = {1, 2, 3};
int values[5] = {0, 0, 0, 0, 0};
values = numbers; 
Run Code Online (Sandbox Code Playgroud)

出现以下错误:

Error   1   error C2106: '=' : left operand must be l-value c:\users\abc\documents\visual studio 2012\projects\consoleapplication7\consoleapplication7\main.cpp 9   1   ConsoleApplication7
Run Code Online (Sandbox Code Playgroud)

为什么我不能这样做?错误是什么意思?

Ben*_*ley 25

由于C++与C的向后兼容性,数组具有各种丑陋的行为.其中一种行为是数组不可分配.使用std::arraystd::vector代替.

#include <array>
...
std::array<int,5> numbers = {1,2,3};
std::array<int,5> values = {};
values = numbers;
Run Code Online (Sandbox Code Playgroud)

如果由于某种原因,您必须使用数组,那么您将不得不通过循环或使用循环的函数复制元素,例如 std::copy

#include <algorithm>
...
int numbers[5] = {1, 2, 3};
int values[5] = {};
std::copy(numbers, numbers + 5, values);
Run Code Online (Sandbox Code Playgroud)

作为旁注,您可能已经注意到我初始化values数组的方式不同,只是提供一个空的初始化列表.我依赖于标准中的规则,该规则表明如果为聚合提供初始化列表,无论多么偏倚,所有未指定的元素都会被初始化.对于整数类型,值初始化意味着初始化为零.所以这两个完全相同:

int values[5] = {0, 0, 0, 0, 0};
int values[5] = {};
Run Code Online (Sandbox Code Playgroud)


joh*_*ohn 6

你不能用C++分配数组,它是愚蠢的,但它是真的.您必须逐个复制数组元素.或者您可以使用像memcpy或的内置函数std::copy.

或者你可以放弃数组,std::vector而是使用它.他们可以分配.