void foo(scope void* p) { }
でscope
は何を意味するのでしょうか?
(。パラメータリスト内で使用されるように、私はおよそscope(exit)
またはscope int x = 5;
、が、約scope
を話ではない)
void foo(scope void* p) { }
でscope
は何を意味するのでしょうか?
(。パラメータリスト内で使用されるように、私はおよそscope(exit)
またはscope int x = 5;
、が、約scope
を話ではない)
D.
でscope
ための3つの用途
scope
の文があります。これは、scope(success)
,scope(failure)
、またはscope(exit)
を使用している場合です。次のブロック内のステートメントは、例外がスローされた場合、または成功、失敗、および終了のそれぞれに対して例外がスローされたかどうかに関係なく、scope
ステートメントがあるスコープを終了するときに実行されます。 scope
のこの使用は言語にとどまっています。
scope
ローカル変数。これは、クラスであっても変数をスタックに置きます。オブジェクトはスコープを離れるときに破棄されます。 scope
のこの使用は安全ではなく、最終的には言語から削除されます(ただし、人生を危険にさらしたい人にはstd.typecons.scopedが代わりになります)。
scope
(これは、あなたが尋ねているユースケースです)。代理人であるパラメータに置かれた場合、そのパラメータへの参照をエスケープすることはできません(つまり、グローバル変数に代入すること)。コンパイラがデリゲートでこれを見ると、ローカル関数のアドレスをとるときにクロージャを割り当てるのを避けることができます。これは、ループ(reference post on newsgroup)には不可欠です。現在、scope
は、デリゲート以外の関数パラメータには影響を与えません。また、他のすべての型では無視されますが、将来のある時点で関数のエスケープを防ぐポインタなどの型に影響を与えることがあります。
関数パラメータに使用される場合、in
キーワードは、関数パラメータのscope
が誤って使用されます頻度である、const scope
の別名です。
私は#3を探していた...それは素晴らしいです!私はいつもそれをやる方法を疑問に思った、ありがとう! :) – Mehrdad
@Lambert:これはDウェブサイトには記載されていないようですが、私は報告書を発行しましたので、すぐに文書に追加される可能性があります。 –
@Andrej:クール、ありがとう! :) – Mehrdad