Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah `const int operator[](const int index) const` diutamakan daripada `int operator[](const int index) const` apabila mengembalikan objek?

Mengapakah `const int operator[](const int index) const` diutamakan daripada `int operator[](const int index) const` apabila mengembalikan objek?

Susan Sarandon
Susan Sarandonasal
2024-10-31 19:54:02454semak imbas

Why is `const int operator[](const int index) const` preferred over `int operator[](const int index) const` when returning objects?

Const Objects as Return Values: Beyond the Trivial

Walaupun diterima secara meluas untuk menggunakan const dalam jenis return bila mungkin, persoalan timbul tentang mengapa const int operator[ ](const int index) const diutamakan berbanding int operator[](const int index) const. Untuk menyelidiki perkara ini, mari kita terokai kehalusan const dalam jenis pulangan dahulu.

Seperti yang disebut oleh "Effective C " Item 03, kelayakan const peringkat atas pada jenis pulangan bukan kelas sememangnya diabaikan. Walaupun menulis int const foo();, jenis pulangan kekal int. Walau bagaimanapun, ini tidak berlaku untuk jenis pulangan rujukan. Perbezaan antara int& operator[](int index); dan int const& operator[](int index) const; adalah penting.

Apabila mengembalikan jenis kelas, kelayakan const memainkan peranan penting. Jika T const dikembalikan, pemanggil dihadkan daripada menggunakan fungsi bukan ahli const pada objek yang dikembalikan. Pertimbangkan contoh berikut:

<code class="cpp">class Test
{
public:
    void f();
    void g() const;
};

Test ff();
Test const gg();

ff().f();             // legal
ff().g();             // legal
gg().f();             // **illegal**
gg().g();             // legal</code>

Dalam senario ini, kelayakan const yang dilampirkan pada gg() mengekang pemanggil daripada mengakses fungsi bukan ahli const, seperti f(), memastikan bahawa integriti objek yang dikembalikan adalah dipelihara.

Oleh itu, apabila mengembalikan objek const, kelayakan const pada jenis pulangan berfungsi untuk tujuan di luar kes remeh jenis pulangan bukan rujukan. Ia memastikan bahawa pemanggil berinteraksi dengan objek yang dikembalikan dengan cara yang konsisten, mengekalkan keadaan dalamannya selaras dengan niat reka bentuk kelas.

Atas ialah kandungan terperinci Mengapakah `const int operator[](const int index) const` diutamakan daripada `int operator[](const int index) const` apabila mengembalikan objek?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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