重载运算符->

问题描述

我正在考虑重载ranges::begin/end运算符。我提出了以下简单示例:

std::

尽管此示例有效,但我希望有人能告诉我它为什么有效。 我以为它应该像这样

->

,但是在这里似乎单个箭头不仅返回了指针,而且还取消了对它的引用。这是C ++中的特例吗?

解决方法

是的,这是设计使然,operator->将在返回值上递归调用;那么我们可以像使用原始指针一样使用此类(所谓的智能指针)。

如果提供了用户定义的TypeError: Value passed to parameter 'reduction_indices' has DataType float32 not in list of allowed values: int32,int64 ,则以递归方式再次调用operator->,直到返回的operator->都返回一个普通指针为止。之后,将内置语义应用于该指针。