1. ホーム
  2. c++

[解決済み] 検索結果が見つからなかった場合、"NULL "オブジェクトを返す。

2023-01-20 04:36:09

質問

私はC++の初心者なので、学習中に多くのJavaイズムで設計する傾向があります。とにかく、Javaでは、私がオブジェクトを返す「search」メソッドを持つクラスを持っていた場合 T から Collection< T > から、特定のパラメータにマッチするオブジェクトが見つかったらそのオブジェクトを返し、コレクションにオブジェクトが見つからなかったら null . そして、呼び出し側の関数では、単に if(tResult != null) { ... }

C++では、私は null 値を返せないことがわかりました。私は、オブジェクトが見つからなかったことを呼び出し側の関数に通知する T 型の「インジケータ」を返したいだけなのです。私は、それが本当に例外的な状況ではないので、例外をスローしたくありません。

これは今、私のコードがどのようなものかを示しています。

class Node {
    Attr& getAttribute(const string& attribute_name) const {
       //search collection
       //if found at i
            return attributes[i];
       //if not found
            return NULL; // what should this be?
    }

private:
    vector<Attr> attributes;
}

そのような目印をつけられるようにするには、どのように変更すればよいのでしょうか?

どのように解決するのですか?

C++では、参照はnullにできません。何も見つからなかった場合にオプションで null を返したい場合は、参照ではなくポインタを返す必要があります。

Attr *getAttribute(const string& attribute_name) const {
   //search collection
   //if found at i
        return &attributes[i];
   //if not found
        return nullptr;
}

そうでなければ、もし参照で返すことにこだわるのであれば、属性が見つからない場合に例外を投げるべきです。

(ところで、私はあなたのメソッドが const を返し、非 const 属性を返すことができます。哲学的な理由から、私は const Attr * . もし、この属性を変更したいのであれば、オーバーロードして const を返すメソッドをオーバーロードすることができます。 const 属性も返します)。