[解決済み] 検索結果が見つからなかった場合、"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
属性も返します)。
関連
-
[解決済み】識別子 "string "は未定義?
-
[解決済み】IntelliSense:オブジェクトに、メンバー関数と互換性のない型修飾子がある
-
[解決済み】C++の変数はイニシャライザーを持っているが、不完全な型?
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み】Eclipse IDEでC++エラー「nullptrはこのスコープで宣言されていません」が発生する件
-
[解決済み】エラー。引数リストに一致するコンストラクタのインスタンスがない
-
[解決済み] C++でNULLオブジェクトを返す方法
-
[解決済み】VBAの関数から結果を返す方法
-
[解決済み】関数はnullまたは空のオブジェクトを返すべきですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】識別子 "string "は未定義?
-
[解決済み】C-stringを使用すると警告が表示される。"ローカル変数に関連するスタックメモリのアドレスが返される"
-
[解決済み】 != と =! の違いと例(C++の場合)
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み】#include<iostream>は存在するのですが、「識別子 "cout "は未定義です」というエラーが出ます。なぜですか?
-
[解決済み] gdbを使用してもデバッグシンボルが見つからない
-
[解決済み] 数値定数の前にunqualified-idを付けて、数値を定義することを期待する。
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる
-
[解決済み] C++でNULLオブジェクトを返す方法