2017-03-22 17 views
3

C++のデータ型のソリッドな要約を作成しようとしていますが、新しいデータ型に関する混乱があります。C++ 11のデータ型の混乱

C++のデータ型についての私の知見から、char16_tchar_32_tは基本的なデータ型であり、C++ 11以降のコア言語の一部です。

distinctデータ型です。

Q1:ここで「別個の」とはどういう意味ですか?

Q2:なぜintxx_tタイプファミリのようなint32_tが基本データ型ではないと選択されましたか? intの代わりにそれらを選択すると、どのように有益になるのでしょうか?

答えて

4

質問の第二の部分に答えるために:

固定サイズの整数型は、それらがCから継承されtypedef s。互換性を持たせるためにはtypedefとしてください。 C言語には関数がオーバーロードされていないので、 "distinct"型の必要性は低いです。

int32_tを使用する1つの理由は、あなたがその必要な特性の1つ以上必要ということである:なしパディングビットと正確 32ビット の幅と負の値の2の補数を使用して

符号付き整数型を。

intを使用すると、for exampleは36ビットになり、1の補数を使用する可能性があります。

固有のの要件がない場合は、通常のintを使用すると問題なく動作します。1つの利点は、すべてのシステムでintが利用可能になる一方で、36ビットマシン(または24ビットエンベデッドプロセッサ)にはint32_tがまったくない可能性があるということです。

3

charXX_tタイプは、N2249に導入されました。これらは、オーバーロードを許可するようにuintXX_tから特殊タイプとして作成されます。

uint_least16_tと同じサイズと表現を持つ明確な新しいタイプであるとchar16_tを定義します。同様に、char32_tを別の新しいタイプに定義します。サイズと表現はuint_least32_tと同じです。

[N1040は不可能これらの文字の上にオーバーロードを行いuint_least16_tuint_least32_tへのtypedef、としてchar16_tchar32_tを定義しました。]

0

あなたのQ1に答えるために:

特殊タイプはfalseに等しいstd::is_same<char16_t,uint_least16_t>::valueを意味します。

関数がオーバーロードされる可能性があります。

(サイズ、符号の有無および位置合わせに差はしかし、存在しない。)