簡體   English   中英

為什么要選 <T&> 重新分配作業?

[英]Why should optional<T&> rebind on assignment?

關於引用類型(特別是賦值類型)應該使用optionalvariant爭論一直在進行。 我想更好地了解圍繞這個問題的辯論。

optional<T&> opt;
opt = i;
opt = j; // should this rebind or do i=j?

當前,決定是使optional<T&>格式不正確,而make variant::operator=格式不正確(如果任何類型是引用類型)–避開該參數並仍提供大多數功能。

opt = j 應該重新綁定基礎引用的論點是什么? 換句話說,為什么我們像這樣實現optional

template <class T>
struct optional<T&> {
    T* ptr = nullptr;

    optional& operator=(T& rhs) {
        ptr = &rhs;
        return *this;
    }
};

opt = j應該重新綁定基礎引用的論點是什么?

我不知道您在尋找什么“爭論”。 但是您剛剛為此提出了“一個論點”:

optional<T&> opt;
opt = i;
opt = j;

現在,假裝第二行和第三行彼此遠離。 如果您只是在閱讀代碼,您期望opt = j會做什么? 或更重要的是,為什么您希望它的行為不同於opt = i

使包裝器類型的行為完全基於其當前狀態而如此徹底地改變,將是非常令人驚訝的。

此外,我們已經有一個溝通方式要改變內部optional 即: *opt = j 該作品一樣好了optional<T&>因為它為optional<T>

optional工作的方式非常簡單:它是包裝器類型。 像任何當前存在的包裝器類型一樣,對其進行的操作會影響包裝器 ,而不影響被包裝的東西。 要影響被包裝的東西,可以顯式使用*->或其他一些接口函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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