Если у меня есть что-то вроде этого:
int a = 5;
auto* p = &a;
decltype(*p) b = 1;
Я бы предположил, что decltype(*p)
это int
, а не int&
или const int&
.
Но тогда как насчет разыменования итератора, например,
std::vector<int> a { 5 };
auto it = a.begin();
decltype(*it) b = 1;
Является ли decltype(*it)
int
? Но разве это не тип *it
int&
?
Я подозреваю, что ответ содержится в пункте (4) здесь , но я все еще не понимаю, что такое xvalue и prvalue .
Редактировать : В исходном коде, который меня смутил, должно быть, что-то эквивалентное
const int a = 5;
auto* p = &a;
decltype(*p) b = 1;
и не понял, что a
- это const
, поэтому decltype(*p)
было const int&
, и поэтому третья строка была в порядке.