Ho il seguente codice:Perché la mancata corrispondenza delle dimensioni letterali dell'array non viene catturata al momento della compilazione?
import std.stdio;
int main(string[] args)
{
int[3] my_array = [1, 2];
return 0;
}
Questo compila bene, e poi interrompe quando eseguito, dando questo errore:
arrays_init
[email protected]/rt/arraycat.d(31): lengths don't match for array copy
----------------
arrays_init(_Dmain+0x64) [0x416bbc]
arrays_init(extern (C) int rt.dmain2.main(int, char**).void runMain()+0x1c) [0x418c5c]
arrays_init(extern (C) int rt.dmain2.main(int, char**).void tryExec(scope void delegate())+0x2a) [0x4185d6]
arrays_init(extern (C) int rt.dmain2.main(int, char**).void runAll()+0x3b) [0x418ca3]
arrays_init(extern (C) int rt.dmain2.main(int, char**).void tryExec(scope void delegate())+0x2a) [0x4185d6]
arrays_init(main+0xd1) [0x418561]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xed) [0x7f60bc41d30d]
Questo funziona bene se l'array letterale dispone di 3 elementi, così apparentemente la array letteral deve corrispondere alla dimensione dell'array statico. Ma questo non dovrebbe dare un errore di compilazione poiché la dimensione di entrambi può essere calcolata al momento della compilazione?
+1: la risposta corretta! –
Fortunatamente, è il piano di farlo in modo che il codice dell'OP non si allochi più (nel qual caso, probabilmente produrrà un errore), ma non è stato abbastanza alto sulla lista TODO da fare ancora . –
Forse potrebbero usare la sintassi letterale dell'array C per inizializzare gli array statici. – Scooter