所以我正在玩一些数组,我无法弄清楚为什么这不起作用.
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::array或std::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)
你不能用C++分配数组,它是愚蠢的,但它是真的.您必须逐个复制数组元素.或者您可以使用像memcpy或的内置函数std::copy.
或者你可以放弃数组,std::vector而是使用它.他们可以分配.