Uniwersalna referencja

0

Witam !

Oglądałem wideo o uniwersalnej referencji w c++, i był tam przykład

void foo(Bar&& b) {
   std::move(b);
}

Było powiedziane ,że trzeba użyć std::move() do konwersji wartości lewostronnej do wartości prawostronnej bo tak naprawę b jest wartością lewostronną.
Czy mógłby mi Ktoś wytłumaczyć dlaczego Bar&& b jest wartością lewostronną skoro typ Bar&& wskazuje na wartość prawostronną ?

Z góry dziękuje !

5

Ten move jest bezsensu w tym miejscu i nic nie robi!

to ma sens:

void foo(Bar &&b)
{
    b.doSomething();
    if (b.somthing()) {
        foo(std::move(b));
    } else {
        b.doSomething();
    }
}

Bar b;
// foo(b); // error r-value expected
foo(std::move(b));
// b is invalid here

https://isocpp.org/blog/2012/11/universal-references-in-c11-scott-meyers

1

Bar && b nie wskazuje na wartość prawostronną; && oznacza tzw. "rvalue reference", czyli referencję do której możemy przypisać wartość prawostronną.

1

move(b) to tylko cast i tak naprawdę to samo co (Bar&&)b, więc samo w sobie użyte jako statement absolutnie nic nie robi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1