template <typename T>
void myswap(T a,T b)
{
T temp = a;
a = b;
b = temp;
}
int main()
{
int m(20),n(30);
myswap(ref(m),ref(n));
//m is still 20 and n is still 30
}
Dlaczego wartości m i n nie zostały zamienione? Przekazanie wartości owiniętej w std::ref
do funkcji INCREMENT powoduje zmianę wartości w pierwotnej zmiennej (zmienna w ramce stosu, która wywołuje funkcję INCREMENT). Czy korzystanie z usługi std::ref
jest ograniczone/ograniczone?std :: ref i funkcja wymiany wydaje się nie działać dobrze razem
Lub użyj 'std :: swap' – 101010
Pierwsze zdanie jest nieco mylące.Oczywiście 'std :: ref' nie jest ograniczone do standardowej biblioteki (jak również zauważasz to po niej) –