エントリーの編集は全ユーザーに共通の機能です。
必ずガイドラインを一読の上ご利用ください。
ここにツイート内容が記載されます https://b.hatena.ne.jp/URLはspanで囲んでください
Twitterで共有ONにすると、次回以降このダイアログを飛ばしてTwitterに遷移します
注目コメント算出アルゴリズムの一部にLINEヤフー株式会社の「建設的コメント順位付けモデルAPI」を使用しています
#[derive(Debug)] struct Foo {} fn foo<'a>() -> &'a Foo { let foo = &Foo {}; foo } fn main() { dbg... #[derive(Debug)] struct Foo {} fn foo<'a>() -> &'a Foo { let foo = &Foo {}; foo } fn main() { dbg!(foo()); } この例ではコンパイルはできる、というのが答えです。 この記事では「なぜコンパイルできるのか」について解説していきます。 コンパイルできる理由 Rvalue static promotionにより、Fooは静的領域に保持され、どこからでも参照できるためです。 Rvalue static promotionとは 簡潔に説明すると「コンパイル時に確定できる値かつその値は不変」の場合は静的領域に値を確保し、参照できるようにする rvalueというのは place expression 以外の式のことを指す place expression というのはメモリ位置を表現した式のこと たと