Rumah >pembangunan bahagian belakang >C++ >Mengapa `std::vector::reference` Tidak Mengembalikan `bool&`?

Mengapa `std::vector::reference` Tidak Mengembalikan `bool&`?

Susan Sarandon
Susan Sarandonasal
2024-12-09 00:42:10828semak imbas

Why Doesn't `std::vector::reference` Return a `bool&`?

Mengapa vektor::rujukan Tidak Mengembalikan Rujukan kepada Bool?

Dalam C , std::vector

Isunya

Dalam contoh yang disediakan, fungsi callIfToggled digunakan untuk menogol nilai bool dan memanggil kaedah pada struct. Apabila cuba menghantar rujukan kepada unsur std::vector untuk callIfToggled, ralat kompilasi berlaku. Ini kerana jenis rujukan yang dikembalikan oleh vektor::rujukan bukanlah bool yang dijangkakan&.

Sebabnya

Dalam pengkhususan vektor bool, vektor

Penyelesaian

  • Gunakan vektor Sebaliknya: Gantikan vektor bool dengan vektor untuk menyelesaikan isu pengkhususan.

  • Gunakan Pustaka Boost Containers: Pustaka Boost Containers menyediakan versi vektor yang tidak khusus; yang menawarkan rujukan sebenar kepada nilai bool.
  • Balut Nilai Bool dalam Struktur: Buat struct pembalut di sekeliling bool yang dipanggil MyBool. Ini membolehkan menghantar rujukan kepada pembalut, yang seterusnya memberikan akses tidak langsung kepada nilai bool yang mendasari.
  • Contoh (Vektor Char):

    #include <vector>
    
    struct A
    {
        void foo() {}
    };
    
    template<typename T>
    void callIfToggled(char v1, char &v2, T &t)
    {
        if (v1 != v2)
        {
            v2 = v1;
            t.foo();
        }
    }
    
    int main()
    {
        std::vector<char> v = { false, true, false };
    
        const char f = false;
        A a;
    
        callIfToggled(f, v[0], a);
        callIfToggled(f, v[1], a);
        callIfToggled(f, v[2], a);
    }

    Atas ialah kandungan terperinci Mengapa `std::vector::reference` Tidak Mengembalikan `bool&`?. 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