web-dev-qa-db-ja.com

`shortint`と` int`

intの代わりにshort intをわざわざ使用する必要がありますか?何か便利な違いはありますか?落とし穴はありますか?

13
user542687

ベンが言ったこと。比較が行われるたびにすべてのレジスタが上位ビットを取り除く必要があるため、実際には効率の低いコードを作成します。大量のメモリがあるためにメモリを節約する必要がない限り、ネイティブの整数サイズを使用してください。それがintの目的です。

編集:constについてのあなたのサブ質問さえ見ませんでした。組み込み型(int、float)でconstを使用することは無意味ですが、ポインター/参照は、該当する場合は常にconstである必要があります。クラスメソッドについても同じです。

8
EboMike

short vs int

膨大な数の値でメモリを節約したり、他のコードで必要な特定のメモリレイアウトに準拠したりするなど、本当に正当な理由がない限り、shortを気にしないでください。

多くの異なる整数型を使用すると、複雑さが増し、ラップアラウンドのバグが発生する可能性があります。

最近のコンピューターでは、不必要な非効率性ももたらす可能性があります。

const

できる限りconstをたっぷりと振りかけます。

constは変更される可能性のあるものを制限し、コードを理解しやすくします。このビースティーは動かないので、無視して、より有用で関連性のあるものに向けて考えることができます。

ただし、正式な引数のトップレベルのconstは、慣例により省略されています。これは、おそらく、ゲインが追加された冗長性を上回るのに十分でないためです。

また、関数の純粋な宣言では、引数のトップレベルconstはコンパイラによって単に無視されます。しかし一方で、純粋な宣言を定義と比較する場合、他のいくつかのツールはそれらを無視するほど賢くないかもしれません。ある人は、comp.lang.c ++ Usenetグループの問題に関する以前の議論でそれを引用しました。したがって、ツールチェーンにある程度依存しますが、幸いなことに、これらのconstsに重要な意味を持つツールを使用したことはありません。

乾杯&hth。、

15

関数の引数には絶対にありません。 shortとintを区別する呼び出し規約はほとんどありません。巨大な配列を作成している場合、データがshortに収まる場合はshortを使用して、メモリを節約し、キャッシュの効率を高めることができます。

9
Ben Jackson

質問は技術的に不正な形式です「short intを使用する必要がありますか?」。唯一の良い答えは、「わからない、何を達成しようとしているのか」です。

しかし、いくつかのシナリオを考えてみましょう。

  1. あなた知っているあなたの変数がとることができる値の明確な範囲。

符号付き整数の範囲は次のとおりです。

  • signed char —-2⁷–2⁷-1
  • short —-2¹⁵–2¹⁵-1
  • int —-2¹⁵–2¹⁵-1
  • long —-2³¹–2³¹-1
  • long long —-2⁶³–2⁶³-1

ここで、これらは保証された範囲であり、特定の実装ではより大きくなる可能性があり、多くの場合、そうであることに注意する必要があります。また、前の範囲を次の範囲より大きくすることはできませんが、同じにすることもできます。

shortintの保証範囲は実際には同じであることにすぐに気付くでしょう。これはあなたにそれを使う動機をほとんど与えません。この状況でshortを使用する唯一の理由は、他のコーダーに値が大きすぎないというヒントを与えることですが、これはコメントを介して行うことができます。

ただし、すべての潜在的な値を-128〜127の範囲に収めることができることがわかっている場合は、signed charを使用することは理にかなっています。

  1. 潜在的な値の正確な範囲がわかりません。

この場合、メモリ使用量を最小限に抑えようとするのはかなり悪い立場にあり、おそらく少なくともintを使用する必要があります。最小範囲はshortと同じですが、多くのプラットフォームではそれよりも大きい場合があり、これが役に立ちます。

しかし、より大きな問題は、範囲がわからない値で動作するソフトウェアを作成しようとしていることです。おそらく、コーディングを開始する前(要件が作成されていたとき)に何か問題が発生しました。

  1. あなたは範囲についての考えを持っていますが、それは将来変わる可能性があることを理解しています。

境界にどれだけ近いか自問してみてください。 -1000から+1000になり、-1500 – 1500に変わる可能性があるものについて話している場合は、必ずshortを使用してください。特定のアーキテクチャが価値を埋める可能性があります。つまり、スペースを節約することはできませんが、何も失うことはありません。ただし、現在-14000〜14000であり、予測できないほど大きくなる可能性がある(おそらくそれは何らかの経済的価値がある)数量を扱っている場合は、intに切り替えるのではなく、すぐにlongに移動してください。あなたはいくらかの記憶を失うでしょう、しかしあなた自身にこれらのロールオーバーバグを捕まえる多くの頭痛を救うでしょう。

1
v010dya

short vs int-データがshortに収まる場合は、shortを使用します。メモリを節約します。読者が変数が収まる可能性のあるデータの量を簡単に把握できるようにします。

constの使用-優れたプログラミング手法。データをconstにする必要がある場合は、constにします。誰かがあなたのコードを読むとき、それは非常に役に立ちます。

0
Sanjit Saluja