C ++ 98/03 zwijanie referencji i kwalifikacje CV
Poniższy kod się kompiluje (gcc 4.7.2 lub icc 13) i generuje wyjście „1 2”. Co oznacza żeconst
kwalifikator jest odrzucany, i. mi.,f<int&>
ma typ parametruint&
.
Dlaczego tak się dzieje? Jak rozumiem, zgodnie z §14.3.1.4:
Jeśli argument-szablon dla parametru szablonuT
nazywa typ „odwołanie docv1 S
”, Próba utworzenia typu„ odwołanie docv2 T
”Tworzy typ„ odwołanie docv12 S
", gdziecv12 jest związkiem kwalifikatorów CVcv1 icv2. Nadmiarowe kwerendy cv są ignorowane.
const
nie należy upuszczać. Oto kod:
#include <iostream>
using namespace std;
template <typename T>
void f(const T& t)
{
t++;
}
int main()
{
int a = 1;
cout << a;
f<int&>(a);
cout << ' ' << a << endl;
return 0;
}