は、私は(例としてのみ使用し、ブースト::ファイルシステムで)このパターンの複数のインスタンスに遭遇しましたこのパターンで問題が発生したことは一度もありませんが、sting()
によって返された文字列が破棄され、c_str()
にアクセスするコードがc_str() lifetime is bound to std::string lifetimeとして安全かどうかが疑問でした。返される文字列の生涯とその.c_strは()
1
A
答えて
2
someFunctionTakingCStrings(path.string().c_str());
標準では、匿名のテンポラリpath.string()
の存続期間が関数呼び出しを引き継ぐことが保証されているため、安全です。したがって、c_str()
によって返されたポインタはsomeFunctionTakingCStrings
の有効なパラメータです。概念的には、あなたがtmp
の値のコピーを返却され、以来、実際には、コンパイラは、値のコピー(名前付き戻り値の最適化と呼ばれる処理)を行う最適化しますが、
const std::string path::string() const
は、安全です。
(参照をぶら下げるなるので)あなたが定義されていないだろうしているものと同じ関数本体とconst std::string& path::string() const
ような何か、とs
が外にあるとして
const char* ub_server()
{
std::string s = "Hello";
return s.c_str();
}
は、また、定義されていませんスコープは、関数が戻るまでの時間です。
最後に、関数呼び出しのパラメータとして匿名の一時的なポインタへのポインタをとることは、標準的なC++ではではなく、であることに注意してください。
関連する問題
- 1. のstd ::文字列:: c_str()と
- 2. 文字列クラスのc_str()メソッドは何を返しますか?
- 3. c_str()は空文字列を返します
- 4. のstd ::文字列:: c_str&ヌル終了
- 5. キャストc_str()は短い文字列に対してのみ有効
- 6. C++ c_str文字列の末尾に奇妙な文字を追加する
- 7. C#は、私はそれでキャリッジリターンと文字列が文字列
- 8. 文字列として返されるRegexの扱い方は?
- 9. 動的文字列配列のコンストラクタとnullが返される
- 10. タスクの生涯子と親
- 11. 空文字列のc_strを呼び出す
- 12. 64文字の16進文字列をそれぞれ生成する
- 13. 生涯
- 14. データベースから返される文字列
- 15. それは、JSON文字列
- 16. :期待される文字列またはその他の文字バッファオブジェクト
- 17. 文字列を返すとTuple Pythonの再帰が生成されます
- 18. 2文字の長さの文字列としてToAsciiから返されるキーはどれですか?
- 19. Javascript、生涯設定されたオブジェクト?
- 20. Apache camelの結果が文字列として返される
- 21. Facebookの生涯access_token
- 22. 文字の第二の発生後の文字列を返すとPHP
- 23. 関数からC文字列を返すと、ランダムな文字が返されるのはなぜですか?
- 24. それは文字列のpython
- 25. 文字列とその回文文字列
- 26. は「A」またはランダムに生成された文字列に「」ランダムに生成された文字列
- 27. Django:空の日付文字列はすべて返される
- 28. バイト配列をBinaryReaderを介して文字列に展開すると、空の文字列が返される
- 29. .c_strコマンドで一時文字列を使用しないでください。
- 30. Spring AMQPヘッダーは文字列として返されます
なぜCの質問としてタグ付けされていますか? – wasthishelpful
それにはc_str()があるので – PhilLab
@PhilLab:それはCでコンパイルすることを意味しません;-) – Bathsheba