Rumah > Artikel > pembangunan bahagian belakang > Mengapakah Peraturan Pergerakan Tersirat Memilih Pembina Salin Daripada Pembina Alih Apabila Pembina Alih Tidak Tersedia?
Mengembalikan Objek Kelas mengikut Nilai dengan Peraturan Pergerakan Tersirat
Apabila mengembalikan objek kelas mengikut nilai daripada fungsi, pergerakan tersirat peraturan berlaku. Peraturan ini menentukan pembina yang hendak digunakan untuk memulakan objek yang dikembalikan. Lazimnya, pembina bergerak lebih disukai jika objek dianggap sebagai xvalue (ungkapan yang boleh dialihkan daripada).
Dalam Contoh 1 anda, pembolehubah yang saya isytiharkan dalam Some_thing() fungsi ialah nilai x kerana ia diisytiharkan dalam skop tempatan dan dianggap layak untuk dialihkan. Oleh itu, ujian pembina bergerak(ujian&& s) digunakan, seperti yang ditunjukkan dalam output.
Walau bagaimanapun, dalam Contoh 2, anda mengalih keluar pembina bergerak dan mengubah suai pembina salinan untuk diuji (ujian& z). Perubahan ini menyebabkan output menunjukkan panggilan ke ujian pembina salinan(ujian& z) dan bukannya pembina bergerak, yang dijangkakan disebabkan oleh peraturan langkah tersirat.
Tingkah laku yang kelihatan bercanggah ini berlaku kerana i masih dianggap xvalue, tetapi pengkompil kini juga mempertimbangkan pembina salinan "biasa" sebagai berdaya maju. Peraturan pergerakan tersirat mula-mula cuba menggunakan pembina bergerak, tetapi kerana tiada satu, ia terus menggunakan pembina salinan.
Untuk menguatkuasakan penggunaan pembina bergerak secara eksplisit, anda boleh memadamkan pembina salinan. , seperti yang ditunjukkan dalam Contoh 3. Ini menghalang pengkompil daripada mempertimbangkan pembina salinan sebagai pilihan, dan pembina bergerak akan digunakan walaupun ia ditandakan sebagai const (yang biasanya menghalang pergerakan).
Contoh 4 menunjukkan bahawa objek const masih boleh dialihkan jika pembangun bergerak tersedia dan operasi bergerak adalah noexcept. Dalam kes ini, objek sementara yang dicipta semasa permulaan u dialihkan ke r, menghasilkan panggilan kepada pembina bergerak.
Atas ialah kandungan terperinci Mengapakah Peraturan Pergerakan Tersirat Memilih Pembina Salin Daripada Pembina Alih Apabila Pembina Alih Tidak Tersedia?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!