2

任意のサイズの静的配列をサポートする関数を作成するにはどうすればよいですか?

何かのようなもの:

@safe pure nothrow void fillArray(ref ubyte[] array) {
    /**
     * How do I make this function support arrays of any
     * size; but they don't have to be dynamic?
    **/
}
4

2 に答える 2

3

あなたがする必要があるのはref、引数から を削除することです。参照を使用すると、関数内で配列のサイズを変更すると、関数の外側でもサイズ変更されますが、これは明らかに静的配列では不可能です。

を使用しない場合refでも、配列の内容を編集できます。ただし、配列のサイズを変更すると、配列ポインタのローカル コピーのみが新しい長さで更新されます。ローカル コピーのサイズは異なります。元のポインターは元のサイズのままです。

配列をスライスした場合でも機能します。関数が取得した参照は、とにかく配列のそのスライスへの新しく作成された参照になるためです。元の参照とは等しくありません。

于 2013-11-23T21:01:07.687 に答える