12

NB:誰かがこれを主観的なものと呼ぶと確信していますが、それはかなり具体的だと思います。

C ++ 11は、新しいbasic_stringタイプstd::u16stringと、およびstd::u32stringのタイプエイリアスをそれぞれ提供します。std::basic_string<char16_t>std::basic_string<char32_t>

この文脈での部分文字列の使用は、むしろ「UTF-16」"u16""u32"「UTF-32」を意味します。これは、C ++にはもちろんテキストエンコーディングの概念がないため、ばかげています。

名前は実際には文字の種類char16_tとを反映していますchar32_tが、これらは間違った名前になっているようです。基になるタイプ署名されていないため、署名されていません。

[C++11: 3.9.1/5]:[..]タイプchar16_tとは、それぞれとchar32_tと同じサイズ、符号、および配置を持つ別個のタイプを示します[..]uint_least16_tuint_least32_t

しかし、これらの名前は、そのような符号なしの型の名前がで始まるという規則に違反しているように見えます。また、などの用語で修飾されていないよう'u'な数字の使用は、固定幅の型を示します。16least

それで、私の質問はこれです:私は物事を想像していますか、それともこれらの名前は根本的に欠陥がありますか?

4

3 に答える 3

16

参照する命名規則 ( uint32_tint_fast32_tなど) は、実際にはtypedefにのみ使用され、プリミティブ型には使用されません。プリミティブな整数型は、{signed、unsigned} {char、short、int、long、long long}、{float 型または decimal 型とは対照的に} ... です。

ただし、これらの整数型に加えて、4 つの異なる一意の基本型 、char、およびがあり、それぞれのリテラル、wchar_t、およびの型であり、英数字型データに使用され、同様にそれらの配列にも使用されます。 . これらの型はもちろん整数型でもあるため、一部の算術整数型では同じレイアウトになりますが、言語は前者の算術型 (計算に使用する) と後者を非常に明確に区別します。ある種の I/O データの基本単位を形成する「文字」タイプ。char16_tchar32_t''L''u''U''

(私は以前に、これらの新しいタイプについてここここでとりとめのないことをしました。)

とは、整数型の「char」ファミリに属しているという事実を反映して、実際には非常に適切な名前が付けられているchar16_tと思います。char32_t

于 2012-10-09T10:54:31.737 に答える
4

これらの名前は根本的に欠陥がありますか?

(この質問のほとんどはコメントで答えられていると思いますが、答えを出すためです)いいえ、まったくありません。特定の目的のために作成されましたchar16_tchar32_tすべてのUnicodeエンコーディング形式(UTF-8はでカバーされていますchar)のデータ型をサポートし、Unicodeのみに制限しないように可能な限り一般的なものにします。それらが符号なしであるか固定幅であるかは、それらが何であるか(文字データ型)に直接関係していません。文字を保持および表すタイプ。符号付きは、文字ではなく数値を表すデータ型のプロパティです。タイプは、16ビットまたは32ビットベースの文字データのいずれかで、多かれ少なかれ文字を格納することを目的としています。

于 2012-10-09T02:42:42.827 に答える
-3

定義上、根本的に欠陥があるわけではなく、標準の一部です。それがあなたの感性を傷つけるなら、それに対処する方法を見つけなければなりません。この議論を行う時期は、最新の標準が批准される前であり、その時はとっくに過ぎています。

于 2012-10-09T02:24:25.793 に答える