関数の一時引数の有効期間を理解する
以下に例を示すように、関数の引数としてインスタンス化された一時オブジェクトを利用する場合:
class MyClass { MyClass(int a); }; myFunction(MyClass(42));
それらの破壊の動作を理解することは非常に重要です。 C 標準は、デストラクタのタイミングについての洞察を提供します。
一時引数の破棄タイミング
一時オブジェクトは、それらが存在する完全な式の終了時に終了します。完全な式は、別の式の中にネストされておらず、単独で存在する式を意味します。通常、これはステートメントの完了を指定するセミコロン (または、条件付き、ループ、および switch ステートメントの右括弧) に対応します。指定された例では、完全な式は関数呼び出しで終了します。
テンポラリの存続期間の延長
テンポラリの存続期間は、テンポラリを一定の参照。この戦略により、その寿命が参照の寿命と一致するまで延長されます:
MyClass getMyClass(); { const MyClass& r = getMyClass(); // full expression ends here ... } // object returned by getMyClass() is destroyed here
この手法を使用すると、MyClass obj = getMyClass(); を使用する場合と比較して、不必要なコピー コンストラクターの呼び出しを回避し、パフォーマンスを最適化できます。ただし、その普及率はやや低いです。
以上がC では関数の一時引数はどのくらいの期間存続しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。