2

この質問は以前にもあったことは知っていますが、誰もがそれについて異なる意見を持っているようです。SOの投稿も読んだ後でも、まだ非常に混乱しています。

C++ の作成者である Bjarne Stroustrup は、著書の中で次のように推奨しています。

C スタイルの文字列よりも文字列を優先する (a char*)

std::string最近の多くのプログラマーは、より直感的で使いやすいにもかかわらず、依然として char 配列と C スタイルの文字列を使用しています。彼らは、持っている機能のほとんどを必要としないと言いますstd::string

しかし、それは本当に多くのオーバーヘッドですか? これはゲーム開発に関連しているようですが、文字列にはより多くのリソースが必要であり、フレーム レートに影響を与える可能性があるということですか?

4

3 に答える 3

6

それは本当にそんなに多くのオーバーヘッドですか?

いいえ。ほとんどの場合、いいえ。また、C++11 の移動セマンティクスにより、(以前はオーバーヘッドだった) ケースの数が大幅に削減されました。ほとんどの場合、彼らの無知のために、まだそうすることを好む人々 . 非常にまれなケースchar*では、 を選択するのが正しい場合があります。C API を呼び出す必要があるケースはカウントしていませんが、多くの場合、C APIを引き続き使用できます。API が.char*std::stringstd::stringc_str()const char*

std::string適切でない場合もありますが、それがchar*次の選択肢であるとは限りません。いいえ、そうではありませんstd::vector<char>。ご覧のとおり、C++ には、選択する前に多くの選択肢がありますchar*

次の提案が C++1y (おそらく C++14) の C++ 委員会によって受け入れられた場合、ケースの数 (これはすでにまれです) がさらに削減されることに注意してください。

于 2013-08-11T11:37:42.807 に答える
0

問題は std::string と char * に関するものではないと思います。言いたいことは次のとおりです。

実際、ヒープに割り当てられた char * またはクリティカル パスの std::string 内の char * に注意する必要があります。つまり、動的メモリ割り当てを避ける必要があります。 std:string または char * は問題ではありません。コードで頻繁にヒープ割り当てを行うと、どちらも十分に遅くなる可能性があります。

于 2013-08-11T11:50:40.500 に答える
0

デフォルトでは std::string を使用しますが、パフォーマンスが必要な場合は char* を使用してください。最も内側のループでスピードアップのいくつかの要因を与えることができます。

実際、Bjarne は C++ プログラミング言語の第 3 版にも書いています。

istream& getline (char* s, streamsize n );

インターフェイスの前に速度を優先するために使用される場合があります。つまり、次よりも高速です。

istream& getline (istream& is, string& str, char delim);

于 2013-08-11T11:42:46.393 に答える