違いは、1 つは名前空間内にあり、もう 1 つはそうでないことです。そうでなければ、それらは同じでなければなりません。1 つ目は C バージョンで、2 つ目は C++ バージョンです。C++11 より前は、C 標準ライブラリ バージョンの代わりにプレフィックス付きのバージョンを含めると、すべての C 定義が標準名前空間内に取り込まれることが義務付けられていました。C++11 では、これが常に可能であるとは限らないため、この制限は緩和されています。
コンパイラがこの型を暗黙的に定義している可能性があります。いずれにせよ、cstdint
名前空間のバージョンをstd
利用できるようにするために (そしておそらくグローバル名前空間のバージョンも) 含める必要があります。インクルードstdint.h
すると、修飾されていないバージョンが利用可能になります。
以前のバージョンの Visual Studio はこのヘッダーなしで出荷されたため、これは問題になるはずです。
このすべての狂気のために、ほとんどの人はboost/cstdint.hpp
.
編集:それらは同じであり、同じ目的を果たします。std
原則として、名前空間でバージョンを使用する場合は、 cstdint
. グローバル名前空間にあるものが必要な場合は、stdint.h
. C++ の場合、std
名前空間にあるものを使用することをお勧めします。原則として、常に使用するものを含め、他のヘッダーに依存しないでください。