Продлевается ли срок жизни xvalue, когда он связан с ссылкой на const lvalue?

Если я напишу следующий код:

#include <iostream>

using namespace std;

int main()
{
  cout << &(int &&)123 << endl;
  return 0;
}

затемg++ жалуется:

foo.cc: In function ‘int main()’:
foo.cc:7:20: error: taking address of xvalue (rvalue reference)

Хорошо спасибоЧто такое rvalues, lvalues, xvalues, glvalues и prvalues? Я понял, что значение xvalue означает, что оно «истекает», что имеет смысл. Но теперь, если я сделаю это:

#include <iostream>

using namespace std;

int main()
{
  const int &x = (int &&)123;
  cout << &x << endl;
  return 0;
}

Это "работает" просто отлично и напечатает адрес. Итак, у меня есть несколько вопросов:

Если значение истекает, почему я могу сделать ссылку на него? Ссылка не сохранит исходный объект живым (верно?).Приводит ли такая ссылка к неопределенному поведению? Например. потому что мы ссылаемся на объект, который мог быть уничтожен?

В общем, есть ли способ узнать время жизни ссылки на rvalue?

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

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