const数组的自动引用

时间:2016-02-11 11:17:33

标签: c++ c++11 reference auto

我进入C ++ 11并且真的无法理解为什么会发生这种情况:

const int arrSource[4] = { 5,7,6,4 };
for (auto& i : arrSource) {
    std::cout << i << " ";
    ++i; //error
}

它说i必须是可修改的左值和i:您无法分配给const的变量。

所以这意味着,如果arrSource[]const,它也会i const吗?

2 个答案:

答案 0 :(得分:5)

  

所以这意味着,如果arrSource[]const,它也会i const吗?

是的,如果数组是const,则数组中的每个元素也是const。

auto&根据初始值推断出类型,在这种情况下,它被推断为int const&,因此无法修改。

可能不需要增量(不确定你的意图)。基于范围的for循环负责迭代之间的递增。

如果要修改数组(通过i),则需要删除const

答案 1 :(得分:2)

N4567§3.9.3[basic.type.quali fi er] p6

  

应用于数组类型的Cv-quali firs附加到底层元素类型,因此符号“ cv T”,其中   T是一个数组类型,指的是一个元素是如此合格的数组。元素为的数组类型   cv-quali fi ed也被认为具有与其元素相同的cv-quali cations。