C ++ 98の本来の目的は<cstdint>
、グローバルネームスペースの汚染を避けるためにC ++で使用することでし<cstdint>
た(特に、C ++ 11だけでなく、<c*>
ヘッダー全般で追加されています)。
ただし、実装はとにかくシンボルをグローバル名前空間に置くことに固執し、C ++ 11はこの慣行を承認しました[*]。したがって、基本的に3つのオプションがあります。
- 使用し
<cstdint>
、使用する各整数型を完全に修飾するか、using std::int32_t;
etcでスコープに組み込みます(冗長なので煩わしいですが、C ++標準ライブラリの他のシンボルと同じようにこれを行うには正しい方法です)
- 使用
<stdint.h>
(非推奨のためやや悪い)
- 使用
<cstdint>
して、実装がシンボルをグローバル名前空間に配置することを想定します(保証されていないため非常に悪い)。
実際には、煩わしい大量のコードが最後のオプションを使用しているのではないかと思い<cstdint>
ます。これは、シンボルをグローバル名前空間に配置する実装で偶然に簡単に実行できるためです。最初のものを使用してみてください。2つ目の利点は、おそらくそれを行うだけでなく、グローバル名前空間にものを入れることが保証されていることです。それは特に便利だとは思いませんが、それがあなたの優先順位である場合、それはいくつかの入力を節約するかもしれません。
4番目のオプションがあり、#include <cstdint>
その後にusing namespace std;
便利な場合がありますが、を配置してはいけない場所がありますusing namespace std;
。場所によって、人によってアイデアは異なりますが、「ヘッダーファイルのトップレベル」は「cppファイルのトップレベル」よりも悪く、「限定された範囲内」よりも悪いです。まったく書かない人もusing namespace std;
います。
[*]つまり、C ++標準ヘッダーは、グローバル名前空間にデータを入れることが許可されていますが、必須ではありません。そのため、これらのシンボルとの衝突を回避する必要がありますが、実際には使用できないため、シンボルが存在しない可能性があります。基本的に、C ++のグローバル名前空間は地雷原ですので、避けてください。一つは、委員会はこだわりのと同じくらい有害であるの実装によって実際批准していることを主張するかもしれないusing namespace std;
ヘッダファイルにトップレベルに-一方で、実装は唯一のC標準ライブラリ内のシンボルのためにそれを行うということで違いをusing namespace std;
Cのためにそれを行い++ -記号のみ。C標準には、将来の標準への追加のために予約されている名前をリストするセクションがあります。これらの名前をC ++グローバル名前空間で予約済みとして扱うことも完全に愚かな考えではありませんが、必須ではありません。
<cstdint>
ます。受け取るエラーは次のとおり./misc.h:7:10: fatal error: 'cstdint' file not found
です。