У меня есть некоторые вопросы относительно этой программы:
#include <iostream>
#include <type_traits>
#include <functional>
using namespace std;
template <typename T> void foo ( T x )
{
auto r=ref(x);
cout<<boolalpha;
cout<<is_same<T&,decltype(r)>::value;
}
int main()
{
int x=5;
foo (x);
return 0;
}
Вывод:
false
Я хочу знать, если std::ref
не возвращает ссылку на объект, то что он делает? В принципе, в чем разница между:
T x;
auto r = ref(x);
и
T x;
T &y = x;
Кроме того, я хочу знать, почему эта разница существует? Зачем нам нужны std::ref
или std::reference_wrapper
, когда у нас есть ссылки (т.е. T&
)?