В этих объявлениях
const T a {}; // constant of type T
const T& b {};
создается постоянный объект a
, инициализированный по умолчанию, и постоянная ссылка b
на временный объект, инициализированный по умолчанию.
Выдает компилятор ошибка для этого объявления ссылки
T& d {}; // error
, потому что объявлена непостоянная ссылка на временный объект.
Вы можете объявить ссылку на rvalue следующим образом
T && d {};
Вот демонстрационная программа
#include <iostream>
int main()
{
const int &ri {};
std::cout << "ri = " << ri << '\n';
int && rri {};
std::cout << "rri = " << rri << '\n';
return 0;
}
Вывод программы:
ri = 0
rri = 0