2012-01-23 23 views
7

C++ wiki book誰創造了統一(或統一)賦值運算符這個術語?

... C++ 0x中,這樣的賦值運算符,因爲它消除了需要寫兩個 不同賦值運算符被稱爲一個統一 賦值運算符。 ..

的賦值運算符是需要它的類類型的值:

String & operator = (String s) // the pass-by-value parameter serves as a temporary 
{ 
    s.swap (*this); // Non-throwing swap 
    return *this; 
} 

我試着用google搜索這個詞,但它似乎沒有被廣泛使用。

它從哪裏來?

+0

[This question](http://stackoverflow.com/questions/7458110/c-unified-assignment-operator-move-semantics)提到了完美轉發的Channel 9視頻,我不會去看它找出,但也許你想。如果是來自第9頻道,可能MS是該術語的來源。 – Leigh

回答

4

這似乎是在參考發生在正式類型系統中的unification。我們的想法是,如果r值和l值可以通過只有某些合法替代才能達到相同類型(統一),那麼賦值就是格式良好的。

維基百科聲稱這個想法第一次被John Alan Robinson給予了有意義的關注(也可能是它的名字)。

1

我不確定誰說了這些,但這本wiki書是錯誤的。 「統一」一詞在C++ 0x「標準」中出現(你現在真的應該使用「C++ 11」這個詞,它在2011年8月獲得批准)。

正確的術語是copy elision。從的C++ 0x(n3242,最後我能不脫殼而出的錢),部分12.8 Copying and moving class objects, /34

當滿足一定的條件,實現允許省略類對象的複製/移動建設,即使該對象的複製/移動構造函數和/或析構函數具有副作用。

在這種情況下,實現將被省略的複製/移動操作的源和目標視爲引用同一對象的兩種不同方式,並且該對象的銷燬發生在兩個時間的後期對象會在沒有優化的情況下被銷燬。

複製/移動操作的此省音,稱爲複製省略,在下列情況下(其可以被組合以消除多個拷貝)被允許...

+0

您現在也可以在* C++ 11之後獲得第一個公共草案* [N3337](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf)已出版。 (雖然沒有改變這一部分)。 –

+0

那麼,如果合理數量的人使用* Y *來表示X,即使它不是一個標準定義的術語,或者甚至是不準確的,那麼「X被稱爲Y」的陳述也會是真實的。 –

+0

這是兩件不同的事情。複製elision是統一賦值的優勢之一(我認爲它也適用於C++ 11之前...)。 –