Giriş
const T& şeklindeki parametre kullanan template kod, eğer <int&> şeklinde çağrılırsa parametrenin const olmaması anlamına gelir.
Kodu her zaman şöyle çağırmak gerekir.
const T& şeklindeki parametre kullanan template kod, eğer <int&> şeklinde çağrılırsa parametrenin const olmaması anlamına gelir.
Kodu her zaman şöyle çağırmak gerekir.
g<int>(n);
// or just
g(n);
Şu şekildeki çağrılar yanlış int n{};
g<int&>(n);
Açıklaması şöyle.
...so you have specified that T is a int&. When we apply a reference to an lvalue reference, the two references collapse to a single one, so int& & becomes just int&. Then we get to the rule from [dcl.ref]/1, which states that if you apply const to a reference it is discarded, so int& const just becomes int&...
Örnek
Elimizde şöyle bir kod olsun.template<typename T>
void f(T a, const T& b)
{
++a; // ok
++b; // also ok!
}
template<typename T>
void g(T n)
{
f<T>(n, n);
}
int main()
{
int n{};
g<int&>(n);
}
Hiç yorum yok:
Yorum Gönder