0

byteC++ プログラムで型を定義したいのですが、基本的にunsigned charこれを行うための最も慣用的な方法は何ですか?

さまざまな表現を抽象化する型を定義し、この新しい(8 ビット) 型のタイプbyteセーフな配列を作成できるようにしたいと考えています。私が作成しているプログラム。これが私のプログラムのドメインに固有の 8 ビット バイトであり、プラットフォームやコンパイラに基づくさまざまな実装の影響を受けないことを明確にしたいと思います。byteunsigned char

4

4 に答える 4

4

char、、、unsigned charまたはsigned charすべて1バイトです。std::uint8_t(from <cstdint>)は8ビットバイトです(符号付きバリアントも存在します)。この最後のものは、8ビットバイトを持っているシステムにのみ存在します。またstd::uint_least8_t、(同じヘッダーから)少なくとも8ビットstd::uint_fast8_tを持ち、少なくとも8ビットを持ち、最も効率的なものであると思われるがあります。

于 2012-11-09T16:26:20.830 に答える
2

最も慣用的な方法は、signed charまたはを使用することunsigned charです。typedefを呼び出す場合、byteまたは厳密に型指定する必要がある場合は、BOOST_STRONG_TYPEDEFを使用できます。

正確に8ビットにする必要がある場合は、uint8_tfromを使用できます<cstdint>が、すべてのプラットフォームに存在することが保証されているわけではありません。

于 2012-11-09T16:27:55.123 に答える
2

正直なところ、これは私にとって C++ で最も苛立たしい「機能」の 1 つです。

はい、std::uint8_tまたはを使用できますunsigned char。ほとんどのシステムでは、前者がtypedef後者になります。

しかし...これはtypedef、新しいタイプを作成しないため、タイプセーフではありません。また、委員会は「強力な typedef」を標準に追加することを拒否しました。

検討

void foo (std::uint8_t);
void foo (unsigned char); // ups...
于 2012-11-09T16:37:30.427 に答える
1

I am currently using the uint8_t approach. The way I see it is, if a platform does not have an 8 bit type (in which case my code will not function on that platform), then I don't want it to be running anyways, because I would end up with unexpected behaviour due to the fact that I am processing data with the assumption that it is 8 bits, when in fact it is not. So I don't see why you should use unsigned char, assume it is 8 bits, and then perform all your calculations based on that assumption. It's just asking for trouble in my opinion.

于 2012-11-09T18:46:29.173 に答える