Sto cercando di capire come funziona std :: ref.Come funzionano reference_wrapper e std :: ref?
#include <functional>
#include <iostream>
template <class C>
void func(C c){
c += 1;
}
int main(){
int x{3};
std::cout << x << std::endl;
func(x);
std::cout << x << std::endl;
func(std::ref(x));
std::cout << x << std::endl;
}
Output : 3 3 4
Nel codice di cui sopra, penso che il parametro di template C
per la terza chiamata di funzione viene istanziato come std::reference_wrapper<int>
. Durante la lettura di the reference, ho notato che non c'è l'operatore +=
in std::reference_wrapper<int>
. Quindi, come è valido c += 1;
?
Quindi, c è ancora reference_wrapper, giusto? –
Sungmin
@Sungmin: Infatti, 'c' non può cambiare tipo; ma '+ =' viene applicato al risultato di 'c.operator int &()' che sarà un riferimento alla destinazione del 'reference_wrapper'. –
Grazie, capisco. – Sungmin