以下代码编译失败:
void func(const QList<int>& list){
auto& elem = list[0];
}
问题是我无法将常量元素绑定到非常量引用。以下代码有效:
const auto& elem = list[0];
有人可以解释为什么将列表传递为const
会使所有元素都const
吗?
有人可以解释为什么将列表传递为
const
会使所有元素都const
吗?
这是标准容器遵循的语义。这是我可以看到的原因:
const int arr1 = {10, 20};
arr1[0] = 40; // Error. Elements of arr1 cannot be modified.
const std::vector<int> arr2 = {10, 20};
arr2[0] = 40; // Same semantics. Error. Elements of arr2 cannot be modified.
将该逻辑扩展到QList
,如果QList
是const
,则const
QList
的元素。
auto& elem = list[0];
这意味着您将 list[0]
的值分配给通过引用elem
,这可能会更改list[0]
的值。
void func(const QList<int>& list)
您已将列表作为 const 传递,这意味着func
不应该更改列表。
下面的代码将起作用:
auto elem = list[0]; //This will work, as it will create copy
const auto& elem = list[0]; //will not allow to change the value