根據C++標準,something.operator=(somethingElse)
和something = somethingElse
之間是否有差異?顯式的operator = call和= operator是否有區別?
第一次出現在T& something
的模板中,我想知道是否可以用更易讀的第二個版本替換它。
根據C++標準,something.operator=(somethingElse)
和something = somethingElse
之間是否有差異?顯式的operator = call和= operator是否有區別?
第一次出現在T& something
的模板中,我想知道是否可以用更易讀的第二個版本替換它。
有微小的差別,因爲a = b
並不總是對對象a
調用明確操作:
T a = b;
。這不是一個任務,但初始化:它會調用拷貝(或移動)建設a = b;
當是一個內部對象(整數,指針,浮點數,...):在=
運營商是內置一個。T
是可複製的,即使在類上沒有聲明operator =
,也允許分配,因爲編譯器使用默認的內置分配運算符。但是,如果operator =
方法存在並且由重載解析規則選擇,則賦值運算符將調用它。
不,沒有。一個明確的=
運算符在聲明合適的operator=
方法的類上調用operator=()
,就像直接調用operator=
方法一樣。
這對所有運營商而言都是如此,而不僅僅是=
。這就是類方法意義的定義:它指定將相應的運算符應用於類的實例時執行的操作。
我正要對此+1,直到我讀到「對所有操作員而言,這不僅僅是=」。其他運算符允許非成員,所以'a @ b'不能再和'a.operator @ ...'相同。一個可以使一個程序不合格,而另一個不可以,反之亦然。 –
除了在複製初始化上下文之外,短運算符表達式等同於函數表達式。 Table 12 C++標準草案的描述操作的表達式:
轉載:
Subclause Expression As member function As non-member function
[over.unary] | @a | (a)[email protected] ( ) | [email protected](a)
[over.binary] | [email protected] | (a)[email protected] (b) | [email protected](a, b)
[over.ass] | a=b | (a).operator= (b) |
[over.sub] | a[b] | (a).operator[](b) |
[over.ref] | a-> | (a).operator->( ) |
[over.inc] | [email protected] | (a)[email protected] (0) | [email protected](a, 0)
哪裏@
是用於操作者的佔位符。
原因,還有其它上下文使用=
操作者;在函數聲明,如拖欠成員函數,刪除功能和= 0; // pure virtual
@向下選民,關心評論? – WhiZTiM
請注意內置類型沒有'operator ='。如果你有'T.operator =(something)',那麼'T'不能是內置類型。 – NathanOliver