簡體   English   中英

C ++賦值運算符可以是自由函數嗎?

[英]Can C++ assignment operators be free functions?

我正在嘗試這樣的事情:

Foo & operator=(Foo & to, const Bar &from);

但是我收到了這個錯誤:

E2239 'operator =(Foo &, const Bar &)' must be a member function

操作員可以/不能被定義為自由功能是否有限制?如果是,為什么?

賦值運算符必須是非靜態成員函數,並且必須只有一個參數:

賦值運算符應由具有一個參數的非靜態成員函數實現(C ++ 03 13.5.3 / 1)。

operator()operator[]operator->也必須實現為非靜態成員函數。

特定於類的operator newoperator delete (及其變體)必須實現為靜態成員函數(請注意,這些函數是隱式靜態的,即使它們未使用static關鍵字聲明)。

這不可以。

我想,原因與復制構造函數有關。 它們具有非常相似的語義,並且,您無法像其他構造函數一樣在類之外定義復制構造函數。 因此,他們不想將雙胞胎分開(避免雙胞胎悖論:)。

PS C ++中的一個恥辱是,您無法將成員添加到現有類中。 這沒有低級別的原因。 如果可能,您可以通過不在類定義標頭中聲明私有函數來解耦標頭和cpp依賴關系。

暫無
暫無

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

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