2017-12-27 23 views
-4

宣言はisalpha、isdigit、isspace関数が浮動小数点型を取得するのはなぜですか?

int isdigit (int c); 

であり、彼らがオーバーロードされていない場合は? 確かに彼らは正しく動作しません。しかし、どうして暗黙のタイプ会話があるのですか?

私はエラーが発生していると思います。機能はcharまたはcharコード(int)しか取得できませんが、他のタイプは取得できません。 C++がdoubleをintに変換する理由は、精度を失うことなく可能です。

C++は強力なタイピング言語です。

+2

なぜ引数が 'char'ではないのですか?はいの場合は、Unicodeを考えてください。 – Cristik

+0

参考資料を読んでくださいhttp://en.cppreference.com/w/cpp/string/byte/isdigit – DAle

+0

「int isdigit(float)= delete;」という追加のオーバーロードがない理由を尋ねていますか? – Jarod42

答えて

1

これらの関数は、C++に移植される前にCの一部であったことに注意してください。したがって、Cを参照してより有益な答えを得ることができます。は、Cの標準で定義されており、8ビットcharと衝突しないように定義されているため、より広いタイプが必要ですこれにはintで十分です。また、文字型関数のほとんどはEOFを入力として使用するように設計されています。 (彼らはC++でcharタイプですが)

はさらに'a''b'、などのようなすべての単一引用符の文字リテラルはC.にintタイプです。

so isdigit & c。パラメーターとしてintを指定します。それはC.でネイティブ条件付きタイプですので、彼らは(C++で、条件演算子がboolを返しますが、Cで、彼らはintを返すことに注意してください。)intを返す

どれ過負荷(もちろん、関数のオーバーロードはCの一部ではありません)文字エンコーディングは常に整数型で行われるため、浮動小数点パラメータの場合は無意味です。

+0

私はなぜdoubleとintの間の暗黙の型会話があるのか​​興味深いです。 –

関連する問題