I quattro operatori menzionati nel messaggio originale, =
, ()
, ->
e []
, devono infatti essere implementate come funzioni membro non statiche (rispettivamente C++ 98 §13.5.3/1, §13.5.4/1, §13.5.5/1 e §13.5.6/1).
Bjarne Stroustrup era, come ricordo da precedenti discussioni sull'argomento, mantenere un po 'di buonsenso nella lingua, cioè avere almeno alcune cose su cui fare affidamento indipendentemente da quanto Qualcuno Else abbia rovinato definendo non- operatori membri per le classi esistenti.
Non sono sicuro di essere completamente d'accordo sul fatto che la restrizione sia davvero d'aiuto, ma.
EDIT: Ho consultato Bjarne Stroustrup su questo (è sempre utile) ma sembra che le apparenti incoerenze delle regole non siano altro che un caso di incidente storico congelato. Egli osserva che "ora sembra peggio di quanto non fosse perché le regole per lvalue e riferimenti sono cambiate da quando sono state formulate le regole di sovraccarico. Ho cercato di esaminare nuovamente questo problema un paio di anni fa, ma ho perso tempo prima di produrre un proposta completa. "
Acclamazioni & hth,
PS:. "La progettazione e evoluzione del C++" libro è grande per questo tipo di domanda, ma purtroppo non averlo.
fonte
2010-10-14 22:40:02
Sono abbastanza sicuro che '-> *' può essere implementato come una funzione non membro. –
@James: hai ragione. @Armen: Probabilmente solo miopia. – GManNickG
@James. Il libro C++ in breve dice diversamente ... –