またはのような小さい型の代わりにをstring::compare返すのはなぜですか?私の理解では、このメソッドは-1、0、または1のみを返します。intshortchar
2番目の部分では、タイプの2つのオブジェクトを比較する比較メソッドを設計していて、Foo-1、0、または1のみを返したい場合、を使用するshortか、char一般的には良いアイデアでしょうか。
編集:私は修正されました。string::compare-1、0、または1を返しません。実際には> 0、<0または0の値を返します。
おおよその答えのようintですが、戻り値は「rvalues」であり、それらの「rvalues」はint型(4バイト)よりも小さくてもメリットがないため、よりも小さい型を返す理由はありません。また、多くの人は、ほとんどのシステムのレジスターはおそらくintいずれにせよサイズが大きくなるだろうと指摘しました。これらのレジスターは、1、2、または4バイトの値を与えるかどうかにかかわらず満たされるため、小さい値。
編集2:実際には、アライメント、マスキングなどの小さなデータ型を使用すると、余分な処理オーバーヘッドが発生する可能性があるようです。一般的なコンセンサスは、配列の場合。
今日は何かを学びました、ありがとうみんな!
string::compare()あなたは明確に戻り値を述べへのリンクは<0、0、および> 0 -not- -1、0と1である
shortまたはchar代わりに使用する利点は何intですか?ほとんどのアーキテクチャは、関数の戻り値をレジスタに格納し、inta shortやだけでなく、aもレジスタに収まりcharます。char数値型に使用することは常に悪い考えです。特に、符号付きの値が正しく処理されることを保証する必要がある場合はなおさらです。
charプラットフォームでcharは、戻り値がゼロ未満の場合のコードチェックは失敗するため、使用することはお勧めできません。