Bagaimanakah Pengoptimuman Nilai Pulangan Dinamakan (NRVO) Mempengaruhi Gelagat Pulangan Pembolehubah Setempat?

Barbara Streisand
Lepaskan: 2024-11-09 09:03:02
asal
746 orang telah melayarinya

How Does Named Return Value Optimization (NRVO) Affect Local Variable Return Behavior?

Memahami Gelagat Pengembalian Pembolehubah Setempat

Apabila mengembalikan pembolehubah tempatan daripada fungsi, gelagatnya boleh berbeza-beza bergantung pada pengoptimuman pengkompil.

NRVO (Dinamakan Pengoptimuman Nilai Pulangan)

Apabila NRVO didayakan, pengkompil mengoptimumkan pernyataan pulangan dengan mencipta objek yang dikembalikan terus di tapak nilai pulangan. Dalam kes ini, tiada salinan dilakukan dan objek asal dimusnahkan selepas pemulangan.

Output dengan NRVO Didayakan

// With NRVO enabled, only one constructor and destructor call is made.
class test {
public:
  test(int p) {
    std::cout << "Constructor (test(int p)) called\n";
  }

  ~test() {
    std::cout << "Destructor called\n";
  }
};

test function() {
  test i(8);
  return i;
}

int main() {
  test o = function();
  return 0;
}
Salin selepas log masuk

Output:

Constructor (test(int p)) called
Destructor called
Salin selepas log masuk

NRVO Dilumpuhkan

Untuk melumpuhkan NRVO, gunakan bendera -fno-elide-constructors semasa penyusunan. Dalam kes ini, pengkompil tidak melaksanakan NRVO, dan salinan objek dibuat dalam nilai pulangan.

Output dengan NRVO Disabled

// With NRVO disabled, both constructor and destructor calls are made twice.
class test {
public:
  test(int p) {
    std::cout << "Constructor (test(int p)) called\n";
  }

  test(test&& other) {
    std::cout << "Constructor (test(test&& other)) called\n";
  }

  ~test() {
    std::cout << "Destructor called\n";
  }
};

test function() {
  test i(8);
  return i;
}

int main() {
  test o = function();
  return 0;
}
Salin selepas log masuk

Output :

Constructor (test(int p)) called
Constructor (test(test&& other)) called
Destructor called
Destructor called
Salin selepas log masuk

Ringkasan

  • Dengan NRVO didayakan, mengembalikan pembolehubah tempatan menghapuskan keperluan untuk salinan, membina objek secara langsung di tapak pemulangan, dan memusnahkan objek asal serta-merta.
  • Dengan NRVO dilumpuhkan, salinan objek dibuat dan dikembalikan, menghasilkan dua salinan objek.

Atas ialah kandungan terperinci Bagaimanakah Pengoptimuman Nilai Pulangan Dinamakan (NRVO) Mempengaruhi Gelagat Pulangan Pembolehubah Setempat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan