ローカル変数への参照を返す
C では、ローカル変数への参照を返すことは、ダングリングにつながる可能性があるため、一般的に推奨されません。参考文献。ただし、特定の状況では、以下の例のように、まだ機能しているように見える場合があります。
int& foo() { int i = 6; std::cout << &i << std::endl; return i; } int main() { int i = foo(); std::cout << i << std::endl; std::cout << &i << std::endl; }
このコードはエラーなしでコンパイルおよび実行され、次のように出力されます。
0xfefef2 6 0x7ffe82600698
Contrary予想どおり、foo() への呼び出しが戻った後も、main() の変数 i は値 6 を保持します。これは、この場合、コンパイラが foo() 関数の終了後もローカル変数の有効期間を延長したためです。
この動作は実装固有であり、依存すべきではありません。一般に、ローカル変数への参照を返さないようにすることが推奨されます。ローカル変数の値を返す必要がある場合は、代わりに値で返すことをお勧めします。
以上がローカル C 変数への参照を返すことが一般的に推奨されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。