Это было первое, что я прочитал, когда читал о xvalues, prvalues и glvalues :)
хорошо принятого ответа на этот вопросРазрешают ли ссылки rvalue висячие ссылки? Казалось бы, значения xvalue не продлеваются, когда они присваиваются rvalue-ссылке lvalue, как в вопросе. Однако, когда я делаю это
#include <iostream>
using namespace std;
class Something {
public:
Something() {
cout << "Something()" << endl;
}
Something(const Something&) {
cout << "Something(const Something&)" << endl;
}
Something(Something&&) {
cout << "Something(Something&&)" << endl;
}
~Something() {
cout << "~Something()" << endl;
}
int a;
};
Something make_something() {
return Something{};
}
int main() {
auto&& something = make_something().a;
return 0;
}
Время жизни объекта, возвращаемого вызовомmake_something
продлен, хотяmake_something().a
является xvalue согласноhttp://en.cppreference.com/w/cpp/language/value_category (третья пуля в объяснении xvalues перечисляет доступ члена, который у меня есть выше, как xvalue,)
a.m, член выражения объекта, где a является значением r, а m является нестатическим членом данных не ссылочного типа;
Если категории значений не определяют, когда будет продлен срок действия значения r, что тогда? Мне трудно понять, когда время жизни rvalue продлено в C ++