ホームページ >バックエンド開発 >C++ >標準ベクトルの要素として参照を使用できないのはなぜですか?

標準ベクトルの要素として参照を使用できないのはなぜですか?

DDD
DDDオリジナル
2024-12-26 16:13:13877ブラウズ

Why Can't I Use References as Elements in a Standard Vector?

なぜ私のベクトルは参照を受け入れないのですか?

問題: Vector動作しますが、Vectorコンパイラ エラーが発生します。

説明:

ベクターおよびその他のコンテナでは、コンポーネント タイプを割り当て可能にする必要があります。参照は、特定のメモリ位置への定数参照を保持するため、割り当て不可能な型です。参照が初期化されると、別のオブジェクトを指すことはできません。

可能なアプローチ:

  • 代わりにポインターを使用します: これは次のとおりです。異なるオブジェクトへの複数の参照を保持する必要がある場合に推奨されるオプションです。ポインタは、別のメモリ位置に割り当てたり再割り当てしたりできます。
std::vector<int*> hello;
  • 固定タイプのオブジェクトへの参照のベクトルを作成する: このアプローチは、すべての場合に受け入れられます。参照は、への挿入後に割り当ても変更もされない同じタイプのオブジェクトを参照します。 Vector.
struct MyStruct { int data; };

std::vector<MyStruct&> hello;

ただし、この戦略では、参照されているオブジェクトが削除または移動された場合にダングリング参照が発生する可能性があることに注意することが重要です。

  • 使用ラッパー クラス: 内部で参照を保持し、割り当て可能なインターフェイスを提供するラッパー クラスを作成できます。これにより、クラスをコンテナ要素として使用できるようになります。
class Wrapper {
protected:
    int& _data;
public:
    Wrapper(int& data) : _data(data) {}
};

std::vector<Wrapper> hello;

以上が標準ベクトルの要素として参照を使用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。