k
и k2
оба являются const int&
типами.
Полный список типов. Обратите внимание, что верхний уровень const
отбрасывается для вывода типа auto
.
int main()
{
const int i = 42;
auto j = i; // i is an int (const is top-level)
const auto &k = i; // k is a const int&
auto *p = &i; // p is a const int* (const persists as not top-level).
const auto j2 = i, &k2 = i; // j2 is a const int, k2 is a const int&
}
Наконец, если бы вы написали
auto q = &k2;
то тип q
является const int*
, так как const
не на высшем уровне, так не отбрасывается, но auto
тип вычет. Это восстанавливает информацию об отладке, которую вы наблюдаете.
j2
и k2
выглядят несходными, но на самом деле это связано с тем, как декларации работают с запятой, ср. Путаница может быть несорванный написав
const int j2 = i, &k2 = i;
Вы всегда можете узнать наверняка с помощью стандартной функции is_same
библиотеки C++ 11: например
bool am_I_the_same = std::is_same<decltype(k2), const int&)::value
Где decltype
восстанавливает тип своего аргумента.
Код: http://en.cppreference.com/w/cpp/types/is_same
И вопрос ...? :) – Pierre
Вопрос в том, почему & k и & k2 - разные типы? –
Откуда вы знаете, что & k и & k2 имеют разные типы? – cpplearner