私はC++でいくつかのユーティリティ関数のライブラリを開発しています。私はそのライブラリ内の関数のシグネチャに関して疑問を持っています。関数がいくつかのパラメータをとり、値を返す場合、その関数の結果が格納されている変数もその関数のパラメータとして渡されますか?どのようにエラー条件を処理し、エラーの値を返すべきですか?関数の設計決定
関数の設計決定
答えて
C++の場合は、結果を返し、例外を含むエラーを処理する必要があります。
int calc_with_error() {
throw yourExceptionClass("Message");
}
int calc() {
return 5;
}
int main() {
int tmp=calc();
cout << calc;
}
しかし、結果は関数から呼び出しコンテキストにコピーされます。プリミティブなデータ型では、これが最速の方法です。あなたは、複雑なデータ構造を持っている場合しかし、それは結果パラメータへの参照を渡すために高速になります - それは、上記の溶液のようにきれいなコードではありませんが、一例は次のようになります。
void calc(vector<int> &result) {
result.clean();
result.add(5);
}
int main() {
vector<int> tmp;
calc(tmp);
//Do something with the vector
}
戻り値の最適化について忘れないでください。戻り値のコピーは、しばしば最適化されます。 –
いくつかのオプションがあり、主に優先事項です。
あなたがすべきことは、ほとんどの場合、出力とエラーを別々に保つことです。
戻り値としてsuccess/errorを返し、参照渡しの出力パラメータでデータを返すとよいでしょう。
これらの操作は行わないでください。
1.エラー表示として「マジック値」を使用します。
2.グローバル変数を使用してデータを返します。
これはC言語では当てはまりますが、C++ではそうではありません。 –
C++での違いを教えてください。ありがとう。 –
@RakeshK:例外は関数の署名には現れません。 –
人々は頻繁に戻らないように私に教えてこれは非常にベストプラクティスではないため、エラー値です。例外をスローするのが最良ですが、これはエラーコードよりも処理が容易です。また、出力パラメータは良いです、私は大きなデータのためにそれらを使用します。単純な戻り値の場合、戻り値は有効でなければなりません。お見せするために
、もちろん、これはデザインではあまりよくないです。
void checkSomething(bool& output)
{
output = doCheckages();
}
bool checkSomething()
{
return doCheckages();
}
しかしyoureの大きなクラス/構造を処理し、あなたが知っていればはるかに優れていますあなたはそれのインスタンスをたくさん持ちたいとは思わないので、出力パラメータとして渡す方が良いかもしれません。
- 1. MVCデータ設計の決定
- 2. クォーツスケジューラの設計決定
- 3. ContentViewController UIPopoverControllerの設計決定
- 4. エンタープライズライブラリのデータアクセスをブロック設計の決定
- 5. データベース設計で使用する関係の種類を決定する方法
- 6. 消費計画のAzure関数アプリケーションを64ビットに設定
- 7. 配列を必要とする可変長関数の設計上の決定は何ですか?
- 8. 関数型のDBバックアップアプリケーションの設計
- 9. ニューラルネットワーク:コスト関数 "not differentiable"の設計/ Tensorflow
- 10. Python:ステートレス関数ライブラリの設計
- 11. 関数内の定数(計算あり)?
- 12. 関数の極限を決定する
- 13. 関数型プログラミングにおける関数の型の決定
- 14. iOS - コールバックの設計決定(NSNotificationsまたはAppDelegateを使用)
- 15. javascriptでオブジェクトを模倣する - 設計の意思決定
- 16. iOS iPad開発設計の意思決定
- 17. Redisのデータベース設計 - 適切なデータ型を決定し、セカンダリインデックスに
- 18. 基本的なfirebaseデータベース構造設計の意思決定
- 19. 複数の測定のスキーマ設計
- 20. Azure関数の設定ファイル
- 21. 特定の関数を計算する
- 22. 「ユーザー設定」データベーステーブルの設計
- 23. コンパイラの設計 - 定数の値を計算する
- 24. 勾配の計算/適用時の損失関数の設定値
- 25. 関数の値と引数を格納するデータベースの設計
- 26. データベースの設計/関係
- 27. データベーススキーマの関係が設計
- 28. オブジェクトとその関係を設計するときの合成と汎化の間の決定方法は?
- 29. SSRS集計関数でデータセットを指定
- 30. 集計根の決定方法
"C++"と "C"の両方にタグ付けしました。答えはそれぞれに異なる可能性があるので、1つを選んでください。 –
これは選択と視点の問題ですので、組織が策定したコーディングガイドラインに従ってください。 –
@OliCharlesworth:各言語の違いを教えてくれれば幸いです。 –