nienawidzę być okrągły, ale odniesienia RValue funkcjonować t ype jest referencją rwartości do typu funkcji. Istnieje coś takiego jak typ funkcji, np. void()
. I możesz utworzyć odniesienie rwartości do niego.
Pod względem systemu klasyfikacji wprowadzonego przez N3055, jest to wartość x.
Jego zastosowania są rzadkie i niejasne, ale nie są bezużyteczne. Rozważmy na przykład:
void f() {}
...
auto x = std::ref(f);
x
ma typ:
std::reference_wrapper<void()>
A jeśli spojrzeć na streszczeniu dla reference_wrapper
obejmuje:
reference_wrapper(T&) noexcept;
reference_wrapper(T&&) = delete; // do not bind to temporary objects
W tym przykładzie T
jest typem funkcja void()
. Tak więc druga deklaracja tworzy wartość rinue dla typu funkcji, aby zapewnić, że reference_wrapper
nie może zostać skonstruowany z argumentem rwartości. Nawet jeśli T
jest const.
Jeśli nie było prawnym utworzenie wartości rwartej dla funkcji, ochrona ta spowodowałaby błąd czasu kompilacji, nawet jeśli nie przekazaliśmy do konstruktora wartości r.
czy w końcu zrozumiałeś odpowiedź? Pozostawiłem komentarz pod odpowiedzią, więc jeśli znasz wyjaśnienie, podaj je. dzięki –