2017-10-10 54 views
0

我的問題是我如何重載運算符[] []? 另外當我打電話給操作員的延伸時,幕後會發生什麼?如何重載運算符[] []

+1

這些都不是單一的運營商。 – Joey

+0

相關:https://stackoverflow.com/questions/1642028/what-is-the-operator-in-c?rq=1 – Murphy

+0

順便說一句,這個問題聞起來像一個[XY問題](http://xyproblem.info )。當你告訴你想要達到的目標時,你可能會得到更多有用的答案。 – Murphy

回答

2

正確的術語是運營商超載

要實現某種[][],需要返回代理對象的第一個[],其中運算符[]再次被重載。

鏈條()()可以以類似的方式完成。

對於滑動操作件流派,看What is the "-->" operator in C++?

+0

謝謝,你知道幕後發生了什麼嗎?爲了能夠擴展它** n **'th [] – Bizzu

+1

那麼,代理對象可能是一個模板上的*度模板。「這可能會變得相當混亂,但爲什麼不使用'()'與變量參數列表? – Bathsheba

+1

如果他們曾經擴展'operator []'接受用戶定義類型的多個參數,我會成爲一個快樂的露營者 – StoryTeller

1

運營商[][]...()()...-->(到最後,我假設你並不意味着--->)實際上不是C++運算符,但組合的C++操作符。

例如[][][],對左值應用[],並返回某個左值,再次應用[],然後第三次相同。所以沒有實際的[][][],但它只是應用了3次[]

int a[2] = {0,1}; 
int b[3] = {2,3,4}; 
int *c[2] = {a,b}; 

c[0][1]; // [0] first extracts 'a' from 'c', then [1] extracts 1 from a (the value in the second index). 

()()()也是如此。

-->也遵循同樣的想法,但在這裏它是同一個運營商的不重複組合,但--組合,它將返回左值,然後減1吧,>,這會比較左手邊與右手邊。