Вставка в стек STL передается по ссылке, но делает ли стек копию значения? - PullRequest
1 голос
/ 27 марта 2012

Проверяя документацию онлайн я увидел, что она передается по ссылке. Может ли кто-нибудь подтвердить, что стек фактически копирует данные?

Ответы [ 3 ]

7 голосов
/ 27 марта 2012

Да, копирует элемент, который вы ему дали .В C ++ 11 он также может перемещаться, если вы даете ему временное значение или std::move.

Обратите внимание, что C ++ 11 также предлагает emplace, что напрямуюсоздает значение на месте, учитывая аргументы конструктора.

1 голос
/ 27 марта 2012

Параметр для самого адаптера stack является справочным, но помните, что stack - это просто адаптер - его push немедленно вызывает push_back, передавая тот же параметр. Этот вызов, однако, передает параметр по значению.

Следовательно, передаваемый параметр копируется - передача по ссылке на std::stack означает, что он копируется только один раз. Если бы это был проход по значению, то он был бы скопирован дважды (на данный момент игнорируя компилятор, удаляющий копию, что почти наверняка будет).

1 голос
/ 27 марта 2012

Это зависит. Значение копируется, но может работать не так, как вы думали. Если вы нажимаете указатель, например char*, он скопирует только значение указателя, а не всю строку. Если вы нажимаете простой int или CustomObject, но не указатель, он будет скопирован.

...