2015-05-20 79 views
11

foo是一個結構或類與拷貝賦值運算符:有沒有從複製賦值運算符中不返回*的有效理由?

struct foo { 
    foo &operator=(const foo &); // or with some other return type? 
}; 

曾經一個合理理由退貨以外*thisoperator=()什麼?將它用於與作業無關的事情並不合格。

+1

當您返回'this *'時,您可以將賦值運算符鏈接爲'i = j = k = ...'。您可以返回其他內容,但這將基於您的定義以及您希望如何使用類別的用處如何 – Alex

+4

表達式模板。 –

+5

@AlanStokes如果你詳細闡述,那就太好了,你知道的。 –

回答

9

標準的例子是std::atomic。它返回分配的值。如果它返回引用,那麼通讀它可能會產生不同的結果。

+0

你知道其他的例子嗎? – Wolf

+2

@Wolf:Boost :: Phoenix是一個創建懶惰表達式的庫。所以'operator =()'會返回一些你可以調用'operator()()'的對象來實際執行賦值。 –

+0

@BillLynch這似乎是艾倫斯托克斯提到的? – Wolf

0

如果您想防止分配鏈接。

有時它很好的防止表達式是這樣的:

x = y = z = a = b = c = d = foo{15}; 

所以你讓賦值運算符返回void。

struct foo { 
    void operator=(const foo &); 
}; 

對於某些類型的鏈接沒有任何意義。但是你必須以案例爲基礎來看待這個問題。

相關問題