reference_wrapper 的下标运算符

Subscript operator for reference_wrapper

我最近了解到 std::reference_wrapper<T> 有函数调用运算符的重载,以防 T 是类函数。我想知道标准委员会是否有理由在我们捕获类似 std::vector 的情况下不包含数组下标运算符。对我来说似乎很奇怪,在这个标准 class.

中,只有两个典型的运算符中只有一个可以作为 class 成员重载

这背后的原理是什么?

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

重载函数调用运算符有一个重要的结果:class 变成了一个仿函数类型。这在许多情况下都很有用。例如:

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

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