Инициализация обычная и через :v_(v)

151
19 декабря 2018, 05:20

Недавно возникла проблема, что программа не работала при инициализации через :v_(v), а при обычном сработало, но разобраться, в чем проблема, я, к сожалению, так и не смог. Так что хочу спросить здесь, чем отличается такая инициализация переменных в конструкторе

    template<typename Iterator>
class Paginator {
public:
Paginator(Iterator begin, Iterator end, size_t page_size) : begin_(begin), end_(end), page(page_size) {    
    }
private:
    Iterator begin_, end_;
    size_t page;
};

От такой:

template<typename Iterator>
class Paginator {
public:
    Paginator(Iterator begin, Iterator end, size_t page_size){
    begin_ = begin;
    end_ = end;
    page = page_size;
    }
private:
    Iterator begin_, end_;
    size_t page;
};
Answer 1

При входе в тело конструктора все члены-данные класса должны быть инициализированы.

Когда вы пишите:

template <typename T>
class widget
{
public:
    widget(const T& value)
    {
        value_ = value;
    }
private:
    T value_;
};

value_ = value; - это не иницализация, а присваивание. Сначала будет вызван конструктор по умолчанию без параметров (если таковой имеется), затем будет вызвана операция копирующего присваивания (если таковая имеется).

widget(const T& value) :
    value_(value)
{
}

В таком варианте, будет вызван конструктор копирования. Используется именно такой вариант, т.к. фактически он выполнится быстрее из-за меньших затрат. Существуют случаи когда списковая инициализация членов класса необходима: например инициализация константного нестатического члена (присваивание в этом случае не подойтет).

Больше тут

READ ALSO
Случайные числа с++

Случайные числа с++

Как правильно сгенерировать случайные числа от -20 до 70

189
Ошибка с инициализацией переменной

Ошибка с инициализацией переменной

Я не могу понять почему компилятор выдает мне ошибку Ошибка C4700 использована неинициализированная локальная переменная "TempNode"Вот мой код:

178
C++ Firebase. Какую библиотеку выбрать?

C++ Firebase. Какую библиотеку выбрать?

Возникла необходимость работы с Fireabase в C++

172