Mam następujący kod:Dlaczego nie występuje niezgodność rozmiaru literowego tablicy w czasie kompilacji?
import std.stdio;
int main(string[] args)
{
int[3] my_array = [1, 2];
return 0;
}
To kompiluje grzywny, a następnie przerywa po uruchomieniu, co daje ten błąd:
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]
To działa dobrze jeśli tablica dosłowne ma 3 pozycje, więc widocznie tablica literowa musi pasować do rozmiaru tablicy statycznej. Ale czy nie powinno to spowodować błędu kompilacji, ponieważ rozmiar obu można obliczyć w czasie kompilacji?
+1: Prawidłowa odpowiedź! –
Na szczęście, jest to plan polegający na tym, że kod PO nie będzie już przydzielany (w takim przypadku prawdopodobnie spowoduje to błąd), ale nie jest wystarczająco wysoki na liście TODO, która zostanie jeszcze wykonana . –
Być może mogliby użyć literalnej składni C do inicjalizacji tablic statycznych. – Scooter