0はなぜ偽ですか?
この質問は馬鹿げているように聞こえるかもしれませんが、ほとんどのプログラミング言語が0評価されfalse、他の[整数]値が評価されるのはなぜtrueですか? 文字列比較 質問は少し単純すぎるように思えるので、もう少し説明します。まず、プログラマーにとっては明白に思えるかもしれませんが、なぜプログラミング言語がないのか-実際にはあるかもしれませんが、私は使用しました-どこに0評価しtrue、他のすべての[整数]値を評価しfalseますか?その発言はランダムに見えるかもしれませんが、私はそれが良いアイデアだったかもしれないいくつかの例を持っています。まず、文字列の3者間比較の例を取り上げましょstrcmpう。Cを例に取ります。C 言語を最初の言語として試すプログラマーは、次のコードを書きたくなるかもしれません。 if (strcmp(str1, str2)) { // Do something... } 文字列が等しいときに評価されるstrcmp戻り値なので、最初のプログラマーがやろうとしたことは惨めに失敗し、一般的に最初はなぜか理解できません。していたために評価上記1 - -代わりに、この関数はその最も単純な式で使用されている可能性が平等を比較するとき、およびのための適切なチェックとは、必要なときにのみ行われていたであろう。ほとんどの場合、戻り値の型を(私たちの考えでは)考えていたでしょう。0false0true-11bool さらに、sign値-1、0およびのみを受け取る新しいタイプを導入しましょう1。それはかなり便利です。C ++に宇宙船オペレーターがあり、それを望んでいると想像してくださいstd::string(まあ、既にcompare関数はありますが、宇宙船オペレーターはもっと楽しいです)。現在、宣言は次のようになります。 sign operator<=>(const std::string& lhs, const std::string& rhs); していた0ために評価されtrue、宇宙船演算子は存在さえしないだろう、と私たちは宣言している可能性がoperator==そのように: sign operator==(const std::string& lhs, const std::string& rhs); これoperator==は3者間比較を一度に処理し、必要に応じてどの文字列が辞書的に優れているかを確認しながら、次のチェックを実行するために使用できます。 if (str1 == str2) { // Do something... } 古いエラー処理 現在、例外があるため、この部分は、そのようなものが存在しない古い言語(Cなど)にのみ適用されます。Cの標準ライブラリ(およびPOSIXのライブラリ)を見ると、maaaaany関数0が成功すると必ず戻り、それ以外の整数は必ず戻ります。悲しいことに、このようなことをする人を見たことがあります。 #define TRUE 0 // ... if …