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

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

Susan Sarandon
Lepaskan: 2024-12-09 00:42:10
asal
897 orang telah melayarinya

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);
    }
    Salin selepas log masuk

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