C ++では、例外などの機能はプログラム全体に影響します。プログラム全体でそれらを無効にするか、コード全体でそれらを処理する必要があります。有名な C ++報告書上の記事は、それを置きます:
直感に反して、コーディング例外の難しい部分は、明示的なスローとキャッチではありません。例外を使用することの本当に難しい部分は、任意の例外がスローサイトからハンドラーに伝播できるようにすべての介在コードを記述し、プログラムの他の部分を損傷することなく安全に到着することです。
さえがあるのでnew
、例外をスローし、すべての機能が提供する必要がある基本的な例外安全性を - -それは唯一の例外をスローしない保証機能を呼び出しますしない限り、あなた無効に例外がない限り、完全にあなたの全体のプロジェクトでは。
したがって、例外は「プログラム全体」または「チーム全体」の機能です。それらは、それらを使用するチームの全員が理解する必要があるためです。しかし、私が知っている限り、すべてのC ++機能がそのようになっているわけではありません。
考えられる例は、テンプレートを取得していないが、使用していない場合でも、正しいC ++を作成できるかどうかということです。sort
整数の配列を呼び出して、その驚くべき速度の利点を楽しむこともできます。Cのqsort
(関数ポインターが呼び出されないため)バグを危険にさらすことなく、またはそうしませんか?テンプレートは「チーム全体」ではないようです。
コードを直接使用しないコードに影響を与え、したがって「チーム全体」である他のC ++機能はありますか?Cにはない機能に特に興味があります。
更新:私は特に、あなたがそれらに気づく必要がある言語強制サインがない機能を探しています。私が得た最初の答えはconst-correctnessであり、これもチーム全体であるため、誰もがそれについて学ぶ必要があります。ただし、AFAICSは、マークされた関数を呼び出した場合にのみ影響を与えconst
、コンパイラは非constオブジェクトでの呼び出しを禁止するため、Googleに何かを提供します。例外を除いて、あなたはそれを得ることさえしません。さらに、を使用するとすぐに常に使用されるためnew
、例外はより「邪魔」になります。ただし、これを客観的に表現することはできないため、チーム全体の機能に感謝します。
更新2:C ++機能の代わりに、大量のメインストリームプログラミング言語に適用されるマルチスレッドのようなものを除外するために、「C ++固有の機能」のようなものを書くべきでした。
付録:この質問が客観的である理由(疑問がある場合)
C ++は複雑な言語であるため、多くのプロジェクトまたはコーディングガイドは「単純な」C ++機能を選択しようとし、多くの人々は主に主観的な基準に従って一部の機能を含めるか除外しようとします。それについての質問は、ここSOで定期的に閉じられます。
上記の代わりに、「可能な限り正確に」「全チーム」言語機能とは何かを定義し、C ++に関する文献の広範な裏付け証拠とともに例(例外)を提供し、C ++でチーム全体の機能を要求します。例外を超えて。
「チーム全体」の機能を使用するか、それが関連する概念であるかは主観的かもしれませんが、それはこの質問の重要性がいつものように主観的であることを意味します。