簡體   English   中英

為什么 QMap::operator[](const Key & key) 按值返回?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM