std::string 関数から C 文字列リテラルを返す: 詳しい説明
C では、C を返すことの意味を理解することが重要ですstd::string 関数からの文字列リテラル。次のコード スニペットに問題がある理由を詳しく見てみましょう:
<br>std::string myFunction()<br>{</p> <pre class="brush:php;toolbar:false">return "it's me!!";
}
潜在的な落とし穴
最初の分析は正確です。return ステートメントは暗黙的に std:: を呼び出します。 const char[] を使用した文字列コンストラクター。返された文字列は、関数の終了時に破棄される一時オブジェクトになります。
しかし、なぜ機能するのでしょうか?
このコードを実行しても、明らかなエラーは発生しないことがよくあります。未定義の動作として知られる現象が原因です。未定義の動作が発生すると、プログラムの実行は予測不能になり、あらゆることが起こる可能性があります。
この場合、一時文字列に使用されていたメモリは、参照されなくなっても、c_str 経由でアクセスするとその内容が保持される可能性があります。 ()。これは、OS が割り当て解除されたメモリをクリアせず、単に再利用可能としてマークするだけであることが多いためです。
結論
コードは機能しているように見えますが、正しくは、これは未定義の動作に依存しています。つまり、この動作に依存すると、予測不能で信頼性の低い結果が生じる可能性があります。 std::string 関数から C 文字列リテラルを返すことの影響を理解し、適切なメモリ管理を実践して未定義の動作を回避することが重要です。
以上がC で `std::string` 関数から C 文字列リテラルを返すのに問題があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。