QStringではstd :: stringよりもどのようなメリットがありますか?通常のstd :: stringはUnicode文字を格納できますか?私は様々な曲ファイルを開くプログラムを書こうとしています。これらのファイルの名前は、異なる言語にすることができます。私はこのような場合に通常の文字列を使うと正しく動作しないと聞いています。アプリケーションをQTから独立させ、アンドロイドなどでコードを再利用したいと考えています。何を指示してるんですか 。QString over std :: string
答えて
QString
は、Unicodeを扱うことができ、より便利な方法があり、Qtとうまく統合できます。また、より良いパフォーマンスを持っています。cbamber85notedです。
std::string
は、あなたが与えたバイト数だけを格納します。エンコードについては何も知らないのです。 1文字あたり1バイトを使用しますが、世界のすべての言語では十分ではありません。あなたのテキストを保存する最良の方法は、おそらくUTF-8エンコーディングで、文字数が異なるバイト数を取ることができ、std::string
はそれを正しく処理できません。これは、たとえば、length
メソッドが文字ではなくバイト数を返すことを意味します。そして、これは...
私はQTのものを避けるために探しています、他の方法はありますか? –
公平であるためには、std :: stringはUnicodeを使用することもできますが、それはデータが特定のエンコーディングであることを意味するものではありません。 QStringがユニコードの変換を可能にするということですか? – Arafangion
Vihaan、あなたがQtのものを避けようとしているのなら、なぜそれを使用していますか? Qtコンポーネントとのインターフェースが必要な場合は、QStringを使用することで、より簡単に自分の人生を変えることができます。 – Joey
氷山の一角である私はQString
に慣れていないんだけど、std::string
の大きな利点は、それが標準であるということです。 Unicodeに関しては、std::string
には がUTF-8を格納する問題はありません。 std::wstring
(通常は はUTF-16またはUTF-32のいずれかを格納します)を使用する方がよい場合があります。
ユニコードの複雑な操作については、ICUをお勧めします。しかし、 のアプリケーションでは、UTF-8を格納するだけで十分です。
'QString'は合理的な中間です。それは完全なICU機能を提供するわけではありませんが、UTF-8/16/32への変換のような簡単な処理を行うことができます。 – MSalters
+1標準への固執は常に利点です。フレームワークの特殊な型をフレームワークの使用に保存します。私はちょうど不思議に思っていましたが、どのような利点は、UTF - 16またはUTF - 32の文字列は、ユニコードの場合は、std :: stringの対に与えるだろうか? – daramarak
@daramarakこれは、コード内で文字列を使って何をやっているかによって異なります。 'std :: string'は実際には単純なコンテナではなく、含まれている_bytes_のいくつかを置き換えるためのいくつかの余分な機能を備えています。文字やエンコーディングに関する知識はなく、テキストに関連するものはほとんどありません。テキストを操作している場合、テキストを表すクラスが適切かもしれません。あるいは、 'std :: string'をUTF-8テキストとして扱うライブラリです。 –
技術的には、任意のタイプの文字(std::basic_string
)を格納する標準の文字列クラスがあります。 std::string
とstd::wstring
は、char
とwchar
の場合はstd::basic_string
の特殊化に過ぎません。 std::u16string
およびstd::u32string
には、UTF-16およびUTF-32ストレージ用の特殊化もあります。
Qtを扱う必要がある場合は、QString
は、Qtフレームワーク全体がそれに対応するように設計されているため、おそらく常に標準ライブラリの文字列よりも優れた代替手段となります。
ソフトウェアの作成にQtフレームワークを使用している場合は、QStringを使用する方がよいでしょう。単純な理由は、文字列で動作するほとんど全てのQt関数がQStringを受け入れるということです。 std :: stringを使用すると、あるタイプから別のタイプへの型変換が必要な状況に終わることがあります。ソフトウェアがQtをまったく使用していない場合は、std :: stringの使用を検討する必要があります。これにより、コードをより移植性に富み、ユーザーがソフトウェアを使用するためにインストールする余分なフレームワークに依存しなくなります。
- 1. std :: string s =(std :: string) "a" + "b" + "c"; OK?
- 2. boost :: interprocess - std :: string vs std :: vector
- 3. ctypes python std :: string
- 4. char * to std :: string
- 5. std :: string to LPCTSTR
- 6. std :: string :: back()
- 7. std :: string + = operator
- 8. std :: string in C#?
- 9. std :: string allocation policy
- 10. std :: string s()strange behavior
- 11. std :: string :: size()strange behavior
- 12. std :: string with custom allocator
- 13. Windows :: Foundation :: IAsyncOperation <String^>^to std :: string
- 14. C++ std :: string to Ruby VALUE
http://www.joelonsoftware.com/articles/Unicode.html – Arafangion
これはあなたの質問の一部にお答えするのに役立ちます。http://stackoverflow.com/questions/6028093/unicode-stdstring-class-replacement – kenny
@Arafangionそれは楽しみの半分です...ファイルシステムエンコーディングに関するすべての混乱を画像に加えてください。 – 6502