13

重複の可能性:
C ++char*とstd::string

私はC#からのC ++を初めて使用しますが、C++の方がはるかに好きです。

2つの定数文字列(静的ではない)を定義する抽象クラスがあります。そして、私const char*はaがより良い選択であるかどうか疑問に思いました。私はまだC++標準のコツをつかんでいますが、この特定のケースでstd :: stringを使用する必要がある理由は本当にないことがわかりました(文字列を追加または編集する必要はなく、単に経由のコンソールprintf)。

std::stringはすべての場合に固執する必要がありますか?

4

5 に答える 5

9

いずれの場合もstd::stringに固執する必要がありますか?

はい。

おそらく、高性能のマルチスレッドロギングライブラリを作成していて、メモリ割り当てがいつ行われるかを本当に知る必要がある、または低レベルのプロトコルでパケットヘッダーの個々のビットをいじる場合を除いて、 /運転者。

問題は、単純なcharから始めて、それを印刷する必要があることです。したがって、std :: streamは、文字列に対する1つのintにとって苦痛になるため、printf()を使用し、次にsprintf()を使用して解析します。そして、あなたは安全でなく維持不可能なミックスoc c /c++になってしまいます

于 2012-06-07T18:34:37.807 に答える
6

ほとんどの組み込み C++ ライブラリは、文字配列ではなく文字列を操作するため、私はstd::stringの代わりにを使用することに固執します。には、文字列を操作するときにプログラマーに多くの機能を提供する多くの組み込みメソッドと機能があります。const char*std::string

于 2012-06-07T18:39:24.893 に答える
3

いずれの場合もstd::stringに固執する必要がありますか?

std::string必要がなく、単純なもので十分な場合がありchar const*ます。ただし、操作以外の機能もありますが、他の文字列char配列、およびそれらを操作するためのすべての標準アルゴリズムとの比較もできます。

std::stringデフォルトで(メンバーと変数に対して)使用し、それがパフォーマンス低下の原因であることがわかった場合にのみ変更します(そうではありません)

于 2012-06-07T18:36:23.893 に答える
1

std::string値を保存する必要がある場合に使用します。

const char *ほとんどすべてのものを1つに、または1つから簡単に変換できるため、最大限の柔軟性が必要な場合に使用します。

于 2012-06-07T18:38:51.383 に答える
1

これは、リンゴとオレンジを比較するようなものです。std::stringはコンテナー クラスですが、char* は単なる文字シーケンスへのポインターです。

それは本当にすべて、文字列で何をしたいかによって異なります。

一方、Std::string を使用すると、単純な文字列計算および操作関数にすばやくアクセスできます。それらのほとんどは単純な文字列操作関数であり、特別なことは何もありません。

したがって、基本的には、ニーズと関数の宣言方法に依存します。char ポインターに対する std::string の唯一の利点は、特定の長さの宣言を必要としないことです。

于 2012-06-07T18:48:42.773 に答える