[英]Why should optional<T&> rebind on assignment?
關於引用類型(特別是賦值類型)應該使用optional
和variant
爭論一直在進行。 我想更好地了解圍繞這個問題的辯論。
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.