[英]QMap::contains() and QMap::value() does not find existing key-value pair
[英]Why does QMap::operator[](const Key & key) return by value?
我注意到QMap::operator[](const Key & key)
有這兩個重載:
T & QMap::operator[](const Key & key)
const T QMap::operator[](const Key & key) const
是否有按值返回的原因?
因為我們有移動語義:
當按值返回時,我們應該按 const 值返回嗎?
我問的原因是:
想象一下我們有:
class ExpensiveToCopy;
{
public:
int someProperty() const;
...
}
void f(const QMap<int, ExpensiveToCopy>& map)
{
int lala = map[4].someProperty(); // We need to copy the entire object
// just to look at someProperty();
}
在const
情況下,如果一個元素不存在,我們不能將它添加到const
映射中,因此將返回一個本地對象。
否則,在非const
情況下,在返回對它的引用之前,將使用指定的鍵(如果還沒有)創建一個元素。
我認為非引用const
是為了確保客戶端代碼不能以任何方式修改map
。 你知道如果使用const_cast<ExpensiveToCopy>map[4]
或其他方式,我們仍然可以修改map[4]
,但是這個map[4]
不是引用map
第 4 個元素。
也不能用 const 成員存儲 Value 類型,因為按值返回需要 Value::operator=()。 在我看來, QMap::operator[] 的 const 版本構思不合理。 通過調用 contains() 和 at() 可以產生相同的效果。 這是一個方便函數的例子,它很不方便。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.