나는 다음과 같은 코드를 가지고 :왜 컴파일 타임에 배열 리터럴 크기 불일치가 잡히지 않습니까?
import std.stdio;
int main(string[] args)
{
int[3] my_array = [1, 2];
return 0;
}
이는 잘 컴파일하고 중단 실행될 때이 오류를 제공합니다 :
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]
문자 배열이 3 개 항목이있는 경우이 잘 실행되므로 분명히 배열 리터럴은 정적 배열의 크기와 일치해야합니다. 하지만 컴파일 타임에 양쪽 모두의 크기를 계산할 수 있으므로 컴파일 오류가 발생하지 않아야합니까? 아마 때문에이 라인의
+1 : 정답입니다! –
다행히 OP의 코드가 더 이상 할당되지 않도록 계획을 세우는 것이지만 (이 경우 오류가 발생할 수 있음) TODO 목록에서 아직 완료되지 않은 상태입니다 . –
아마 그들은 정적 배열을 초기화하기 위해 C 배열 리터럴 구문을 사용할 수 있습니다. – Scooter