Zastanawiam się, w jakich sytuacjach wciąż potrzebuję użyć odniesień stałych w parametrach od C++ 11. Nie w pełni rozumiem semantykę ruchu, ale myślę, że jest to uzasadnione pytanie. To pytanie jest przeznaczone tylko dla sytuacji, w których odniesienie do const zastępuje wykonywaną kopię, podczas gdy jest potrzebne tylko do "odczytania" wartości (np. Użycie funkcji składowych stałych).C++ 11 Odsyłacz do Constunkcji VS: semantyczny ruch
Normalnie chciałbym napisać (członek) funkcję tak:
#include <vector>
template<class T>
class Vector {
std::vector<T> _impl;
public:
void add(const T& value) {
_impl.push_back(value);
}
};
Ale myślę, że to jest bezpiecznie założyć, że do kompilatora by zoptymalizować go za pomocą semantyki move jeśli piszę to tak i class T
ofcourse implementuje konstruktor ruchu:
#include <vector>
template<class T>
class Vector {
std::vector<T> _impl;
public:
void add(T value) {
_impl.push_back(value);
}
};
Mam rację? Jeśli tak, czy można bezpiecznie założyć, że można go zastosować w każdej sytuacji? Jeśli nie, chciałbym wiedzieć, który. Ułatwiłoby to życie, ponieważ na przykład nie musiałbym wprowadzać specjalizacji dla podstawowych typów, poza tym wygląda na znacznie czystsze.
możliwy duplikat [Czy lepiej w C++ przekazywać wartości lub przekazywać przez stałe odniesienie?] (Http: // stackoverflow.com/questions/270408/is-it-it-better-in-c-to-pass-by-value-or-pass-by-constant-reference) – stijn
'vector :: push_back' tworzy kopie. Szukasz 'emplace_back'. – Cubic
@stijn Nie mogę znaleźć sytuacji similair dotyczącej semantyki ruchu w tym pytaniu. – Tim