2012-03-27 2 views

Antwort

7

Ja, it does copy the element you give it. In C++ 11 kann es auch verschoben werden, wenn Sie ihm eine temporäre oder std::move eingeben.

Beachten Sie, dass C++ 11 auch emplace bietet, die direkt den Wert in-place Konstruktor Argumenten erstellt.

+2

Ein Verweis hinzugefügt, hoffe, es macht Ihnen nichts aus. –

+0

@ NiklasB .: Du warst 30 Sekunden schneller als ich;) –

1

Kommt drauf an. Der Wert wird kopiert, aber es funktioniert möglicherweise nicht so, wie Sie es sich gedacht haben. Wenn Sie einen Zeiger wie char* drücken, kopiert es nur den Zeigerwert und nicht die gesamte Zeichenfolge. Wenn Sie eine einfache int oder CustomObject drücken, aber nicht den Zeiger, wird es kopiert.

1

Der Parameter für den stack Adapter selbst Bezug genommen wird, aber denken Sie daran, dass stack nur ein Adapter - seine push sofort die push_back fordert, dass gleiche Parameter. Dieser Aufruf übergibt den Parameter jedoch als Wert.

Daher wird der Parameter, den Sie übergeben, kopiert - der Durchlauf mit Bezug auf std::stack bedeutet, dass er nur einmal kopiert wird. Wenn das ein wertmäßiger Wert wäre, würde es zweimal kopiert werden (wobei der Compiler, der die Kopie ablegt, im Augenblick ignoriert wird, was er fast sicher tun würde).

Verwandte Themen