Почему исчезает const в параметре const T &, когда T является ссылочным типом? [Дубликат]
На этот вопрос уже есть ответ:
Ссылка рушится? 2 ответа Следующий код показывает, что если шаблон принимаconst
араметр @ создается с ссылочным типом (например,int&
), параметр неconst
:
#include <iostream>
template<typename T>
void f(const T& arg) // arg isn't const if T is a reference type
{
arg = -1;
}
int main()
{
int x = 0;
f<int&>(x); // instantiate f with reference type
std::cout << x << '\n'; // prints -1 under gcc, clang, and msvc
}
Что тут происходит
Я думаю, что начальный типarg
являетсяint & const &
и что это как-то превращается вint&
. Если это так, то как именно это происходит с точки зрения стандарта? Если это не то, что происходит, то что?