QStringはstd::stringに比べてどのような利点がありますか?通常のstd::stringはUnicode文字を格納できますか?いろいろな曲のファイルを開くプログラムを書こうとしています。これらのファイルの名前は、さまざまな言語にすることができます。このような場合に通常の文字列を使用すると、正しく機能しないと聞いています。アプリケーションをQTから独立させ、たとえばandroidでコードを再利用したいと思います。何を指示してるんですか 。
4 に答える
QString
Unicodeを使用でき、より便利なメソッドがあり、Qtとうまく統合できます。また、cbamber85 が指摘しているように、パフォーマンスも向上しています。
std::string
与えられたバイトを保存するだけで、エンコーディングについては何も知りません。1文字あたり1バイトを使用しますが、世界中のすべての言語にとって十分ではありません。テキストを保存する最良の方法は、おそらくUTF-8エンコーディングです。このエンコーディングでは、文字が異なるバイト数を占める可能性があり、std::string
それを適切に処理できません。これは、たとえば、length
メソッドが文字ではなくバイト数を返すことを意味します。そして、これは氷山の一角にすぎません...
ソフトウェアの作成にQtフレームワークを使用している場合は、QStringを使用することをお勧めします。単純な理由は、文字列で機能するほとんどすべてのQt関数がQStringを受け入れるためです。std :: stringを使用すると、次から次へとタイプケースを作成する必要がある状況に陥る可能性があります。ソフトウェアがQtをまったく使用していない場合は、std::stringの使用を検討する必要があります。これにより、コードの移植性が高まり、ユーザーがソフトウェアを使用するためにインストールする必要のある追加のフレームワークに依存しなくなります。
なじみはありませんが、標準的なの
がQString
大きなメリットです。Unicodeに関しては、UTF-8を;に格納することに問題はありません。ただし、実行している内容によっては、 (通常はUTF-16またはUTF-32のいずれかを格納する)を使用する方がよい場合があります。std::string
std::string
std::wstring
Unicodeの複雑な操作については、ICUをお勧めします。ただし、多くのアプリケーションでは、UTF-8を格納するだけで十分です。
技術的には、任意のタイプの文字を格納するための標準の文字列クラスがありますstd::basic_string
。std::string
とは、 forとstd::wstring
の専門分野に他なりません。専門分野もあり、UTF-16およびUTF-32ストレージを対象としています。std::basic_string
char
wchar
std::u16string
std::u32string
とにかく、Qtを使用する必要がある場合は、QString
Qtフレームワーク全体が使用するように設計されているため、標準のライブラリ文字列よりも常に優れた代替手段になります。