如果 QList 实例是常量,是否意味着每个元素都是常量



以下代码编译失败:

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,如果QListconst,则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

最新更新