Продлевается ли срок жизни 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?