繁体   English   中英

reference_wrapper 的下标运算符

[英]Subscript operator for reference_wrapper

我最近了解到std::reference_wrapper<T>对 function 调用运算符有重载,以防T类似于函数。 我想知道标准委员会是否有理由在我们捕获类似std::vector的情况下不包含数组下标运算符。 在我看来很奇怪,在这个标准 class 中只有一个只能作为 class 成员重载的典型运算符之一。

这背后的原因是什么?

通常,引用包装器不能支持底层类型的每个操作。 例如,无法自动支持成员函数。 下标运算符只是一个普通的操作,所以没有充分的理由支持它。 当然,我们可以得到一个调用底层 operator[ operator[]operator[] ,但是为什么不支持operator+呢? operator== beginend怎么样? :)

不过,重载 function 调用运算符有一个重要的后果:class 成为函子类型。 这在许多情况下都很有用。 例如:

std::for_each(first, last, std::ref(stateful_functor));

这是重载operator()的一个很好的理由。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM