C++ 如何重载运算符[][]

C++ 如何重载运算符[][],c++,operator-overloading,operators,C++,Operator Overloading,Operators,我的问题是,我如何才能将重载运算符[]转换为[]? 另外,当我调用操作符的扩展名时,在幕后发生了什么?正确的术语是操作符重载 要实现某种类型的[]],需要为第一个[]返回代理对象,该对象上的运算符[]再次重载 ()()的链可以用类似的方式完成 有关幻灯片操作符类型,请参见正确的术语是操作符重载 要实现某种类型的[]],需要为第一个[]返回代理对象,该对象上的运算符[]再次重载 ()()的链可以用类似的方式完成 对于幻灯片操作符类型,请参阅 > []……/Cube >,()…< />代码>和 >

我的问题是,我如何才能将重载运算符[]转换为[]?
另外,当我调用操作符的扩展名时,在幕后发生了什么?

正确的术语是操作符重载

要实现某种类型的
[]]
,需要为第一个
[]
返回代理对象,该对象上的运算符
[]
再次重载

()()
的链可以用类似的方式完成


有关幻灯片操作符类型,请参见正确的术语是操作符重载

要实现某种类型的
[]]
,需要为第一个
[]
返回代理对象,该对象上的运算符
[]
再次重载

()()
的链可以用类似的方式完成


对于幻灯片操作符类型,请参阅<代码> > []……/Cube >,<代码>()…< />代码>和<代码> > >代码>(最后,我假设你并不意味着<代码> --> /COD>)实际上不是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,
,它将比较左手侧和右手侧。

操作符
[]…
()…<代码> >和<代码> --> /COD>(最后,我假设你不是指<代码> --> /COD>)不是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,
,这将比较左手边和右手边。

这两个都不是单一操作员。相关:顺便说一句,这个问题闻起来像一个问题。当你说出你想要达到的目标时,你可能会得到更多有用的答案。请不要“过载”
-->
。您可以使用
运算符--(int)
执行此操作,该运算符返回一个具有
运算符->
的代理,但这种不寻常的语法非常容易混淆。@Murphy我试图找到该问题的一般解决方案。我在一个项目中工作,该项目用于不同维度的矩阵,我找到了2维问题的解决方案,但对于n维问题,我找不到解决方案,我的解决方案也不能帮助我理解如何将其扩展到n维,这两个问题都不是单一的运算符。相关:顺便说一句,这个问题闻起来像是一个问题。当你说出你想要达到的目标时,你可能会得到更多有用的答案。请不要“过载”
-->
。您可以使用
运算符--(int)
执行此操作,该运算符返回一个具有
运算符->
的代理,但这种不寻常的语法非常容易混淆。@Murphy我试图找到该问题的一般解决方案。我在一个不同维度的矩阵中工作,我找到了2维问题的解决方案,但对于n维问题,我没有找到,我的解决方案也不能帮助我理解如何将其扩展到n维谢谢,你知道幕后发生了什么吗?为了扩展n'th[]的功能,代理对象可以是一个在*度上模板化的模板。但这可能会变得非常混乱。为什么不使用带有变量参数列表的
()
?如果他们曾经扩展
操作符[]
来接受用户定义类型的多个参数,我将是一个快乐的营运商
[]
如果中间对象有意义,解决方案会更好。例如,如果2D数组的
操作符[]
返回对1D数组的引用,该数组本身就可以完全运行。如果必须创建代理对象,我更喜欢使用
操作符()
@patatahooligan-我不喜欢它。在一些不是函子的东西上重载函数调用操作符感觉很奇怪……尽管我想有人可能会说矩阵是从有序索引对到底层字段的函数……所以IDK。谢谢,你知道幕后发生了什么吗?因为它能够扩展n'th[]那么,代理对象可以是在*度上模板化的模板。但这可能会变得相当混乱。为什么不将
()
与变量参数列表一起使用呢?如果它们展开
运算符[]
以接受用户定义类型的多个参数,我会很高兴。如果中间对象有意义,那么
[]
解决方案会更好。例如,如果2D数组的
操作符[]
返回对1D数组的引用,该数组本身就可以完全正常工作。如果必须创建代理对象,我更喜欢使用
operator()
@patatahooligan-我不喜欢它。在不是函子的东西上重载函数调用操作符感觉很奇怪。。。虽然我想有人会说矩阵是从有序的索引对到基础字段的函数。。。所以IDK。