ホームページ > バックエンド開発 > C++ > `std::vector::reference` が `bool&` を返さないのはなぜですか?

`std::vector::reference` が `bool&` を返さないのはなぜですか?

Susan Sarandon
リリース: 2024-12-09 00:42:10
オリジナル
828 人が閲覧しました

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

vector::reference が Bool への参照を返さないのはなぜですか?

C では、 std::vector

問題

提供された例では、関数 callIfToggled を使用してブール値と構造体のメソッドを呼び出します。 std::vector の要素への参照を渡そうとすると、 callIfToggled にすると、コンパイル エラーが発生します。これは、vector::reference によって返される参照型が予期された bool& ではないためです。

理由

bool ベクトル特殊化内では、vector

解決策

  • Use Vector代わりに: bool ベクトルをベクトル に置き換えます。特殊化の問題を回避するには、

  • Boost Containers ライブラリを使用します: Boost Containers ライブラリは、vector の特殊化されていないバージョンを提供します。これはブール値への真の参照を提供します。
  • ブール値を構造体でラップする: 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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート