[英]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 new
和operator delete
(及其變體)必須實現為靜態成員函數(請注意,這些函數是隱式靜態的,即使它們未使用static
關鍵字聲明)。
這不可以。
我想,原因與復制構造函數有關。 它們具有非常相似的語義,並且,您無法像其他構造函數一樣在類之外定義復制構造函數。 因此,他們不想將雙胞胎分開(避免雙胞胎悖論:)。
PS C ++中的一個恥辱是,您無法將成員添加到現有類中。 這沒有低級別的原因。 如果可能,您可以通過不在類定義標頭中聲明私有函數來解耦標頭和cpp依賴關系。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.