Это было первое, что я прочитал, когда читал о 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 ++

Ответы на вопрос(2)

Ваш ответ на вопрос