LINUX.ORG.RU

Инициализация вектора при передачи в функцию


0

1

Каким образом в QVector достигаются такие штуки?:

func(QVector<int>() << 1 << 2 << 3);
Пытаюсь создать свой класс Vector. Оператор << уже перегрузил, что еще надо? Конструктор копирования? (Такие конструкции безопасны ведь?)

template <typename T>
struct V
{
	V& operator<<( const T& item ) { (void) item; return *this; }
};

int main( void )
{
	V<int>() << 1 << 2 << 3;
}

но лучше пользуйся С++11, там есть списки инициализации

vaino
()

Оператор << уже перегрузил, что еще надо? Конструктор копирования?

Конструктор копирования и оператор присваивания обязательны для любого класса, который нельзя копировать побайтно.

(Такие конструкции безопасны ведь?)

Вполне. Только время будет жрать. Qt-контейнеры используют разделяемые данные для ускорения.

schizoid ★★★
()

<< должен возвращать референс на сам объект, что бы можно было писать цепочки. И тогда все может работать, даже без конструктора копирования (если в объекте нет указателей и пр, ну выше уже сказали).

AIv ★★★★★
()
Ответ на: комментарий от schizoid

Конструктор копирования и оператор присваивания обязательны для любого класса, который нельзя копировать побайтно.

чушь:

struct
{
    string str_;
}

побайтно копировать нельзя, но руками добавлять конструктор копирования, например, тут не надо

vaino
()
Ответ на: комментарий от vaino

Виноват, забыл про умолчательный конструктор.

schizoid ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.