如何重载运算符 [][]
How to overload operator [][]
我的问题是如何重载运算符 [][] ?
此外,当我呼叫接线员的分机时,幕后发生了什么?
正确的术语是运算符重载。
要实现某种 [][]
需要您为第一个 []
返回一个代理对象,运算符 []
再次重载。
()()
的链可以用类似的方式完成。
对于幻灯片运算符类型,请参阅What is the "-->" operator in C++?
运算符[][]...
、()()...
和-->
(至于最后一个,我假设你不是指--->
)实际上不是c++运算符,但 C++ 运算符的组合。
例如[][][]
,对左值应用[]
,return某个左值,再次应用[]
,然后对第三次。所以没有实际的 [][][]
,只是 []
应用了 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).
()()()
也是如此。
-->
也是遵循同样的思路,只不过这里不是重复组合同一个运算符,而是--
的组合,将return的左值和然后将其减 1,>
,这将比较左侧和右侧。
我的问题是如何重载运算符 [][] ? 此外,当我呼叫接线员的分机时,幕后发生了什么?
正确的术语是运算符重载。
要实现某种 [][]
需要您为第一个 []
返回一个代理对象,运算符 []
再次重载。
()()
的链可以用类似的方式完成。
对于幻灯片运算符类型,请参阅What is the "-->" operator in C++?
运算符[][]...
、()()...
和-->
(至于最后一个,我假设你不是指--->
)实际上不是c++运算符,但 C++ 运算符的组合。
例如[][][]
,对左值应用[]
,return某个左值,再次应用[]
,然后对第三次。所以没有实际的 [][][]
,只是 []
应用了 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).
()()()
也是如此。
-->
也是遵循同样的思路,只不过这里不是重复组合同一个运算符,而是--
的组合,将return的左值和然后将其减 1,>
,这将比较左侧和右侧。