Почему std :: reference_wrapper неявно приводится к ссылке при вызове функции-члена? [Дубликат]
На этот вопрос уже есть ответ:
Как правильно использовать std :: reference_wrappers 1 ответ Я не понимаю, почему нельзя использоватьstd::reference_wrapper
так
#include <vector>
#include <functional>
struct Foo
{
void f() {};
};
int main()
{
std::vector<std::reference_wrapper<Foo>> vrFoo;
Foo foo;
vrFoo.push_back(foo);
// vrFoo[0].f(); // error
vrFoo[0].get().f(); // or static_cast<Foo&>(v[0]).f();
}
Почему мы должны использоватьget()
функция-член? Это выглядит какstd::reference_wrapper
имеет неявное преобразование вT&
с помощьюoperator T&() const noexcept
, видетьhttp: //en.cppreference.com/w/cpp/utility/functional/reference_wrappe так почему неv[0]
неявно преобразуется в ссылку?
В других ситуациях, таких как
std::cout << v[0] << std::endl
это преобразование происходит (я предполагаю, чтоFoo
перегрузкиoperator<<
)