Saya membaca kode sumber STL dan saya tidak tahu apa &&
yang seharusnya dilakukan oleh operator alamat. Ini adalah contoh kode dari stl_vector.h
:
vector&
operator=(vector&& __x) // <-- Note double ampersands here
{
// NB: DR 675.
this->clear();
this->swap(__x);
return *this;
}
Apakah "Alamat Alamat" masuk akal? Mengapa ia memiliki dua operator alamat, bukan hanya satu?
c++
stl
operator-keyword
memory-address
Anarki
sumber
sumber
&
, itu tidak akan ada hubungannya dengan alamat-operator, tetapi menandakan bahwa itu__x
adalah referensi.Jawaban:
Ini adalah kode C ++ 11 . Dalam C ++ 11,
&&
token dapat digunakan untuk berarti "referensi nilai".sumber
&&
baru dalam C ++ 11.int&& a
berarti "a" adalah r-value reference.&&
biasanya hanya digunakan untuk mendeklarasikan parameter suatu fungsi. Dan itu hanya membutuhkan ekspresi r-value. Jika Anda tidak tahu apa nilai-r, penjelasan sederhananya adalah ia tidak memiliki alamat memori. Misalnya angka 6, dan karakter 'v' keduanya r-nilai.int a
, a adalah nilai l, namun(a+2)
merupakan nilai r. Sebagai contoh:Harapan itu informatif.
sumber
int&& c = std::move( b );
, dll.&&
baru dalam C ++ 11, dan itu menandakan bahwa fungsi menerima RValue-Referensi - yaitu, referensi ke argumen yang akan dihancurkan.sumber
Seperti jawaban lain yang disebutkan,
&&
token dalam konteks ini adalah baru untuk C ++ 0x (standar C ++ berikutnya) dan mewakili "referensi nilai".Referensi nilai adalah salah satu hal baru yang lebih penting dalam standar yang akan datang; mereka memungkinkan dukungan untuk 'memindahkan' semantik pada objek dan memungkinkan penerusan panggilan fungsi yang sempurna.
Ini adalah topik yang agak rumit - salah satu perkenalan terbaik (yang tidak hanya sepintas) adalah artikel oleh Stephan T. Lavavej, "Rvalue Referensi: C ++ 0x Fitur di VC10, Bagian 2"
Perhatikan bahwa artikel tersebut masih cukup banyak dibaca, tetapi juga bermanfaat. Dan meskipun itu ada di Microsoft VC ++ Blog, semua (atau hampir semua) informasinya berlaku untuk kompiler C ++ 0x apa pun.
sumber
&&
Token itu sendiri bukanlah hal baru; artinya dalam deklarasi adalah. Tapi kamu tahu itu.Saya percaya bahwa ini adalah operator bergerak.
operator=
adalah operator penugasan, katakanlahvector x = vector y
. Theclear()
fungsi panggilan terdengar seperti seolah-olah itu adalah menghapus isi vektor untuk mencegah kebocoran memori. Operator mengembalikan pointer ke vektor baru.Cara ini,
Meskipun kami memberikan nilai vektor, vektor b memiliki nilai. Ini keajaiban
operator=()
!MSDN - Cara membuat konstruktor bergerak
sumber