常量数组的自动引用
Auto reference for const array
我正在学习 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
?
So it means, that if the arrSource[]
is const
, it makes i
const
too?
是的,如果数组是const,那么数组中的每个元素也是const。
auto&
根据初始化器推导类型,在本例中推导为int const&
,因此无法修改。
可能不需要增量(不确定您的意图)。基于范围的 for
循环负责迭代之间的递增。
如果要修改数组(通过 i
),则需要删除 const
.
N4567 § 3.9.3 [basic.type.quali更多] p6
Cv-qualifiers applied to an array type attach to the underlying element type, so the notation “cv T”, where
T is an array type, refers to an array whose elements are so-qualified. An array type whose elements are
cv-qualified is also considered to have the same cv-qualifications as its elements.
我正在学习 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
?
So it means, that if the
arrSource[]
isconst
, it makesi
const
too?
是的,如果数组是const,那么数组中的每个元素也是const。
auto&
根据初始化器推导类型,在本例中推导为int const&
,因此无法修改。
可能不需要增量(不确定您的意图)。基于范围的 for
循环负责迭代之间的递增。
如果要修改数组(通过 i
),则需要删除 const
.
N4567 § 3.9.3 [basic.type.quali更多] p6
Cv-qualifiers applied to an array type attach to the underlying element type, so the notation “cv T”, where T is an array type, refers to an array whose elements are so-qualified. An array type whose elements are cv-qualified is also considered to have the same cv-qualifications as its elements.