Considerate questo codice:Questo comportamento std :: ref è logico?
#include <iostream>
#include <functional>
int xx = 7;
template<class T>
void f1(T arg)
{
arg += xx;
}
template<class T>
void f2(T arg)
{
arg = xx;
}
int main()
{
int j;
j=100;
f1(std::ref(j));
std::cout << j << std::endl;
j=100;
f2(std::ref(j));
std::cout << j << std::endl;
}
Quando viene eseguito, uscite questo codice
107
100
mi sarei aspettato il secondo valore di essere 7 invece di 100.
Che cosa mi manca?
Il wrapper di riferimento è resettabile, quindi assegnando le modifiche a ciò che viene fatto riferimento, non l'oggetto di riferimento. –
Ottima domanda! – vsoftco