шаблон класса - Как писать конструкторы

В чем разница между 1 и 2, 3 и 4? Для меня это работает так же.

template<typename T>
class Foo
{
private:
    T data;
public:
    Foo(T data) : data(data) {}             // 1.
    Foo<T>(T data) : data(data) {}          // 2.
    Foo& operator=(const Foo& foo)          // 3.
    {
        data = foo.data;
    }
    Foo<T>& operator=(const Foo<T>& foo)    // 4.
    {
        data = foo.data;
    }
};

person KARO3213    schedule 15.08.2020    source источник
comment
Ключ к гуглу вводится именем класса.   -  person Ayxan Haqverdili    schedule 15.08.2020


Ответы (1)


1 и 2 одинаковые. 3 и 4 одинаковые. 3 и 4 не конструкторы, это операторы присваивания.

3 и 4 не будут вызываться, если вы сделаете это:

Foo<int> f1;
Foo<int> f2=f1;

а 1 и 2 будут.

Вам нужно найти специальные функции-члены С++ Конструктор С++ Конструктор копирования С++ Оператор присваивания С++ в тексте С++, который вы изучаете (даже в Google), поскольку вам, похоже, не хватает базового словарного запаса по этим вопросам.

= во время строительства не вызывает operator=. Иногда ooerator= создается неявно. Как правило, вы хотите реализовать default или delete все 5 специальных функций-членов или реализовать 0 из них. Это известно как правило трех (пяти) и как правило нуля.

person Yakk - Adam Nevraumont    schedule 15.08.2020