クラス インターフェイスを設計しているときに、かなり頻繁にconst char*
orを使用する必要があるかどうかを座って考えます。const std::string&
次の 2 つの関数プロトタイプを使用します。
void foo(const char* str);
void foo(std::string str);
関数が文字列を格納する場合、foo
文字列を渡し、可能な場合はムーブ セマンティクスを利用できるため、2 番目のオプションの方が適しています。ただし、foo
文字列を読み取るだけでよい場合、const char*
解決策はより良いでしょうか?
パフォーマンスの観点から、一時的std::string
なものを作成する必要はありません。ただし、既存の文字列を引数として関数を呼び出すと、邪魔に見えます: foo(mystr.c_str())
. さらに悪いことに、将来のある時点でより高度な操作をアレイに対して実行する必要がある場合、またはコピーを保存する必要がある場合は、インターフェイスを変更する必要があります。
だから私の質問はこれです:
個人的なものであれ、そうでないものであれ、明確に定義された規則があり、それがいつ、std::string
またはconst char*
より良い選択であるかを規定していますか? さらに、新しいプロジェクトを開始するときは、使用方法に一貫性を持たせるのが最善ですか、それとも現在のコードのチャンクに最適な方を採用するのが最善でしょうか?