• 締切済み

C++推奨のデータ型

OS/実装依存のないデータ型を使用してC++のハードウェアモデルを書こうとしています。その為、ビット表現が連想できるデータ型を使用したいと思っているのですが、 今までのCで書いたモデルでは、 uint8_t/uint32_t等を使っていましたが、 C++で何か推奨のデータ型があるかとぐぐって見ると Wikipedia 整数型 のページではuint8_tはC言語というカテゴリ扱いになっており、C/C++はint/long等となっていました。 uint8_t等を使うことはC++では推奨されていないのでしょうか。

みんなの回答

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

uint8_tなどはC99の<stdint.h>で定義される型です。現行のC++規格はC99より前のCをベースにしていますので、これらの型定義はありません。 ただし、CコンパイラがC99に対応している処理系であれば、C++でも<stdint.h>が使えるかと思います。しかし、 > OS/実装依存のない ということが条件なので、そうした拡張に依存するのはよくないですね。 ちなみにC99の場合であっても、uint8_tやuint32_tは任意実装です。確実にどんな処理系でも(フリースタンディング環境であっても)サポートされるのは、uint_least8_tとかuint_least32_t、あるいはuint_fast8_tとかuint_fast32_tということになります。 ところで、uintN_tなどは、その整数型のビット数を特定することはできますが、詳細な振る舞いが一見しただけでは分かりにくくなる嫌いがあります。 まず、関数の多重定義を解決する場合、実際にどの関数が呼ばれるのかは、uintN_tの定義を調べてみるまでわからなくなります。 次に、uint16_tのような型の場合、汎整数昇格によってint型になるのかunsigned int型になるのかが処理系に依存してしまいますので、慎重に扱わないと予期しない結果にとまどうことになります。

関連するQ&A