varsayalım Aşağıdaki kod var:Taşı :: push_back
#include <vector>
struct A {
int a;
int x;
};
int main() {
using namespace std;
A a1;
A a2;
vector<A> va;
va.push_back(a1);
va.push_back(move(a2));
}
Ben std :: vektör elemanları std :: listeye aksine bitişik olarak saklandığı farkındayım. Yukarıdaki kodda a2
taşınır ama a2
vektörü va
vektörüne gerçekten kopyalanmıyor mu? va.push_back(a2);
ve arasındaki fark nedir? Eğer va.push_back(move(a2))
versiyonu vector<T>::push_back(T&&)
adı verilecek kullandığınızda va.push_back(a2)
sürümü vector<T>::push_back(const T&)
kullanmak
, 'std ::' move'ing a2' yapar tam * hiçbir şey *, bir düz tip (yani, harici veri yok) ve irade hala kopya beri. – Xeo
@cdhowie Teşekkürler. düzeltildi. – ggg
Okumak için bir giriş yapmak için [Birisi lütfen bana semantik anlamını açıklayabilir misiniz?] (Http://stackoverflow.com/questions/3106110/) okumak isteyebilirsiniz. – fredoverflow