Non c'è [][]
operatore. Quello che succede in realtà è che il secondo []
funziona sulla variabile restituita dal primo []
.Poiché esiste già questa funzionalità, creerebbe ambiguità se esistesse un operatore [][]
.
Per esempio: supponiamo di avere una variabile x
di qualche tipo T
.
T x = new T();
Se usiamo l'operatore []
, diciamo una variabile di un altro tipo Q
viene restituito:
Q y = x[0];
e quindi utilizzando l'operatore []
su una variabile di tipo Q
potrebbe restituire una variabile di tipo R
:
R z = y[0];
Pertanto x[][]
restituisce una variabile di t ipo R.
Diciamo che siamo in realtà stati in grado di sovraccaricare [][]
per il tipo T tale che ha restituito un tipo S:
S a = x[0][0];
Il compilatore non avrebbe alcun modo di sapere se si deve utilizzare l'operatore [][]
su x
per restituire una variabile di tipo S
oppure utilizzare l'operatore []
due volte di seguito per restituire una variabile di tipo R
. Questa è l'ambiguità che ho menzionato sopra.
La cosa migliore se sei bloccato sull'utilizzo di parentesi quadre è quello di avere operator[]
restituire una variabile che ha anche []
sovraccarico (o forse una variabile dello stesso tipo, con un set di bandiera), e hanno che inizialmente restituiva un accordo variabile con il secondo []
.
Ma la soluzione migliore qui (come già menzionato in another answer) consiste nell'utilizzare un operatore diverso come ()
.
Non c'è operatore [] [] in C++. –
Sovraccarico della matrice restituita dal sovraccarico [] OH SHI- –