我看到這一點:什麼函數可以應用於右值?
std::tie(iter, inserted) = set_of_s.insert(value);
從http://en.cppreference.com/w/cpp/utility/tuple/tie
std::tie
應返回一個右值的元組,但隨後一個賦值操作符適用於它。這是如何工作的?我以爲賦值運算符只能用於左值?
我看到這一點:什麼函數可以應用於右值?
std::tie(iter, inserted) = set_of_s.insert(value);
從http://en.cppreference.com/w/cpp/utility/tuple/tie
std::tie
應返回一個右值的元組,但隨後一個賦值操作符適用於它。這是如何工作的?我以爲賦值運算符只能用於左值?
什麼函數可以應用於右值?
一種右值可以是
this
參數的成員函數const
左值參考它不能通過非const 左值參考。
這是如何工作的?
重載的賦值運算符是一個構件的功能,所以可以在一個右值被調用。
我以爲賦值運算符只能用於左值嗎?
這就是內置賦值運算符的情況。重載操作符是函數,並遵循與函數相同的規則。
是的,內置的=
運算符必須有一個左值作爲其左操作數。但是,這不是內置的=
運營商,就像它看起來一樣。相反,它是在功能operator=
打電話,相當於:
std::tie(iter, inserted).operator=(set_of_s.insert(value));
類成員訪問運算.
不需要它的左操作數是一個左值,所以一切都還好。
備註:不要混淆表達式的值類別與左值/右值引用類型。賦值運算符可能非常有右值引用的名稱作爲其左操作數,因爲它的名稱是一個左值。
這是根據定義*該類型的*'='運算符。它只是這種類型的成員,這是什麼使這種使用。 –
@DavidRodríguez-dribeas是的,不好的措辭,我應該解決它。 –
但賦值運算符返回一個左值引用。左值從哪裏來? – texasbruce
定義'std :: tie'返回一個定義了'operator =()'的對象(甚至沒有引用它)。那個操作符被調用。照常。你在哪裏看到這個問題? –
@ c-smile我真的很困惑cuz opetator =()返回一個左值引用和theres沒有lvaue任何地方它會返回... – texasbruce
你的任務就是這樣: '{std :: tie temp( iter,插入); temp.operator =(set_of_s。插入(值)); }'。如你所見,它只是一個臨時對象的函數調用, –