Рассмотрим следующий фрагмент кода
void Test()
{
int x = 0;
int& rx = x;
int* px = &x;
auto apx = px; // deduced type is int*
auto arx = rx; // deduced type is int
}
Можно провести аналогию с типами указателей, ожидая, что выведенный тип arx
будет int&
, но на самом деле это int
.
Какое правило Стандарта регулирует это? В чем причина этого? Иногда я попадаюсь на это в таких случаях:
const BigClass& GetBigClass();
...
auto ref_bigclass = GetBigClass(); // unexpected copy is performed