5

ユーザー API を作成していますが、この方法で const char* 値を返すのは正しいですか?

const char * returnErrorString(int errorCode)
{
   switch(errorCode)
    ...
   return "This error code means that...";
}

この方法で文字列リテラルを返すのは好きではありませんが、RVO の最適化により、ユーザーが読み取る前に文字列リテラルを破棄するべきではありません。これは正しいですか? それについて何か提案はありますか?

4

3 に答える 3

1

この質問にC++タグ (C タグではなく) を付けたので、std::string戻り値として使用することをお勧めします。

std::string returnErrorString(int errorCode)
{
   switch(errorCode)
    ...
   return "This error code means that...";
}

(たとえば、これが DLL によってエクスポートされた純粋な C インターフェイス関数であり、異なるバージョンの VC++ コンパイラから使用できるようにしたい場合を除きます。この場合、境界に STL クラスを配置することはできません。しかし、この場合、明確に述べる必要があります。ドキュメントでは、返されたconst char *文字列を呼び出し元のコードで削除してはならないことを示しています)。

最新の C++ では、タイトなループで高いパフォーマンスが強くstd::string求められる場合を除き、C ライクの代わりに堅牢で便利な文字列クラス like を使用してconst char*ください。

于 2013-10-03T09:00:25.843 に答える