一時文字列で std::string::c_str() を使用しても安全ですか?
C では、 std を使用します。一時文字列の :string::c_str() は懸念の対象となっています。次のコード スニペットを考えてみましょう。
void consumer(char const* p) { std::printf("%s", p); } std::string random_string_generator(); consumer(random_string_generator().c_str());
一時 std::string オブジェクトで std::string::c_str() を呼び出すと、string オブジェクトの破棄が差し迫っているように見えるため、この懸念が生じます。
ただし、C 11 標準によれば、std::string::c_str() によって取得されるポインタは、文字列によって管理されるメモリを参照します。
> 提供されたコード スニペットでは、一時文字列オブジェクトは完全な式の終了時 (つまり、consumer() の呼び出し後) に破棄されます。したがって、std::string::c_str() を介して取得されたポインタは Consumer() の呼び出し中ずっと有効であるため、コードは安全であると考えられます。
一時オブジェクトの有効期間は C 98 以降明確に定義されています。コンパイラによって異なる以前のバージョンの C とは異なります。その結果、以前のバージョンでは安全でなかったコードが、最新の C コンパイラでは安全であるとみなされるようになりました。
以上がC の一時文字列で std::string::c_str() を使用しても安全ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。