web-dev-qa-db-ja.com

std :: stringに対するQStringの利点

QStringはstd :: stringに比べてどのような利点がありますか?通常のstd :: stringはUnicode文字を格納できますか?いろいろな曲のファイルを開くプログラムを書こうとしています。これらのファイルの名前は、さまざまな言語にすることができます。このような場合に通常の文字列を使用すると、正しく機能しないと聞いています。アプリケーションをQTから独立させて、たとえばAndroidでコードを再利用したいと思います。何を提案しますか。

24
Vihaan Verma

QString は、Unicodeでの作業を可能にし、より便利なメソッドを備え、Qtとうまく統合します。 cbamber85注記 のように、パフォーマンスも向上します。

std::string与えられたバイトを格納するだけで、エンコーディングについては何も知りません。 1文字あたり1バイトを使用しますが、世界中のすべての言語にとって十分ではありません。テキストを保存する最良の方法は、おそらくUTF-8エンコーディングであり、文字は異なるバイト数を占める可能性があり、std::stringそれを適切に処理することはできません!これは、たとえば、lengthメソッドが文字ではなくバイト数を返すことを意味します。そして、これは氷山の一角にすぎません...

29
Oleh Prypin

ソフトウェアの作成にQtフレームワークを使用している場合は、QStringを使用することをお勧めします。単純な理由は、文字列で機能するほとんどすべてのQt関数がQStringを受け入れるためです。 std :: stringを使用すると、あるものから別のものに活字ケースを入れなければならない状況に陥る可能性があります。ソフトウェアがQtをまったく使用していない場合は、std :: stringの使用を検討する必要があります。これにより、コードの移植性が高まり、ユーザーがソフトウェアを使用するためにインストールする必要のある追加のフレームワークに依存しなくなります。

9
Pankaj

私はQStringに精通していませんが、std::stringの大きな利点は、それがis標準であるということです。 Unicodeに関しては、UTF-8をstd::stringに格納することに問題はありません。ただし、実行している内容によっては、std::wstring(通常はUTF-16またはUTF-32のいずれかを格納します)を使用する方がよい場合があります。

Unicodeの複雑な操作については、ICUをお勧めします。ただし、多くのアプリケーションでは、UTF-8を格納するだけで十分です。

8
James Kanze

技術的には、任意のタイプの文字を格納するための標準の文字列クラスがあります: std::basic_stringstd::stringstd::wstringは、charwcharに対するstd::basic_stringの特殊化に他なりません。 UTF-16およびUTF-32ストレージを対象とした特殊化std::u16stringおよびstd::u32stringもあります。

とにかく、Qtを使用する必要がある場合は、Qtフレームワーク全体が使用するように設計されているため、QStringは標準ライブラリ文字列よりも常に優れた代替手段になります。

4
Morwenn