Konstruktor kopiujący w szablonie klasy

0

Nie mogę zrozumieć działania konstruktora kopiującego z kodu:

template <class T,int n> 
class ArrayTP
{
    T ar[n] ;
public:
    ArrayTP(){};
    explicit ArrayTP(const T & v);   
};


template <class T,int n> 
ArrayTP<T,n>::ArrayTP(const T & v)
{
    for (int i = 0; i<n;++i)
        ar[i] = v;
}

linijka ar[i] = v dlaczego to jest poprawne? Bardziej intuicyjne jest dla mnie wyrażenie ar[i] = v.ar[i]. Być może coś źle zrozumiałem, więc proszę o wyjaśnienie bo póki co wyobrażam sobie z wyrażenia ar[i] = v; przypisanie do każdego elementu tablicy ten sam adres tablicy.

4

v jest typu const T&, (czyli typ elementu tablicy), a więc nie jest to konstruktor kopiujący. By trzeba było zrobić raczej explicit ArrayTP(const ArrayTP<T,n> & arr);

1 użytkowników online, w tym zalogowanych: 0, gości: 1