34143


Rust の質問です. 以下のコードはコンパイルエラーになります.

[code]

    fn main() {
        let a = 100;
        let b = [0; a];
    }
    
[/code]

エラー:

[code]

    let b = [0; a];
                ^ unresolved path in constant expression
    
[/code]

`let a` してるのに, どうして `a` が解決されていないとされてしまってるのでしょうか. よろしくお願いします.


CC BY-SA 3.0
2017-04-20T03:54:59.333
34141
2017-04-20T04:32:41.693
2017-04-20T04:01:21.760
18735
18735
question
rust
Rust: Array を定数で満たす場合


Rustの配列は実行時にサイズを指定できません。`a`の場所には定数式（constant expression）だけが書けます。

定数式を使った例：

[code]

    // 定数式ならコンパイルできる。
    fn main() {
        let c = [0; 100];
        let d = [0; 5 * 10];
    }
    
[/code]

実行時にサイズが指定できない理由は、配列の要素がスタックに格納されるからです。Rustではスタックに置く値のサイズは、コンパイル時に決まっていないといけません。

もし実行時にサイズを指定したいのなら、Vec（ベクタ）の利用を検討してください。

[code]

    // ベクタなら実行時にサイズを指定できる。
    fn main() {
        let a = 100;
        let b = vec![0; a];
    }
    
[/code]

ベクタの要素はヒープに格納されます。スタックに置く場合と異なり、値のサイズは実行時に決められます。

* * *

**追記**

`const` を使うと定数に名前を付けられます。

[code]

    const A: usize = 100;
    
    fn main() {
        let b = [0; A];
    }
    
[/code]


CC BY-SA 3.0
2017-04-20T04:19:20.070
34143
2017-04-20T04:32:41.693
2017-04-20T04:32:41.693
14101
14101
34141
answer