首頁 > 後端開發 > C++ > 為什麼 `std::vector::reference` 不回傳 `bool&`?

為什麼 `std::vector::reference` 不回傳 `bool&`?

Susan Sarandon
發布: 2024-12-09 00:42:10
原創
831 人瀏覽過

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

為什麼 vector::reference 不回傳 Bool 的引用?

在 C 中,std::vector ;容器專門用於布林值。與其他資料類型的向量相比,這種專門化引入了行為差異。

問題

在提供的範例中,函數 callIfToggled 用於切換 bool 值和呼叫結構體上的方法。當嘗試傳遞對 std::vector 元素的參考時呼叫IfToggled,會發生編譯錯誤。這是因為 vector::reference 傳回的參考類型不是預期的 bool&。

原因

在 bool 向量特化中,vector

解決方案

  • 使用向量相反: 將bool 向量替換為向量;解決專業化問題。
  • 使用 Boost Containers 函式庫: Boost Containers 函式庫提供了向量的非專業化版本。它提供了對 bool 值的真實引用。
  • 將 Bool 值包裝在結構中:圍繞 bool 建立一個名為 MyBool 的包裝器結構。這允許傳遞對包裝器的引用,而包裝器提供對底層布林值的間接存取。

範例(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);
}
登入後複製

以上是為什麼 `std::vector::reference` 不回傳 `bool&`?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板