2014-01-12 4 views
2

지금까지 나는 D에서지도가 가치 의미론을 가지고 있음을 알고 있습니다.D에서 배열 배열의 복잡성

키 및 값이 모두 같은 값의 의미를 가질 때 왜이 예에서는 두 번째 라인

Error: cannot implicitly convert expression (x) of type const(uint[ubyte]) to uint[ubyte] 

const(uint[ubyte]) x; 
uint[ubyte] y = x; 

실패 않으면?

답변

5

지금까지지도에는 가치 시맨틱이 있습니다.

D 연관 배열은 참조 유형입니다.

내부적으로는 구현 정의 데이터 구조에 대한 포인터로 표시됩니다. (AA가 null 인 경우 참조 유형처럼 작동하지 않습니다. 첫 번째 멤버를 추가하면 인스턴스화됩니다.)

+0

흠, 내 가치 의미 테스트에 착각해야합니다. 이제 모든'x = y'를'x = y.dup'로 변경해야합니다. 고마워. –

+0

이제 자연스러운 질문이됩니다. 유형에 값 또는 참조 의미가 있는지 여부를 확인하는 특성이 있습니까? –

+0

Phobos에는 항상 새로운 유형의 사본 (정적, 동적 및 연관 배열)을 만드는 유틸리티 기능이 있습니까? 나는 템플릿에서 .dup를 사용한다고 믿는다. 왜냐하면 x와 y가 모두 정적 인 배열이고 (같은 크기의) 올바른 일을하지 않을 때'y = x.dup'를하기 때문에; 그 사이에 불필요한 동적 배열 복사본을 만듭니다. DMD는 다이나믹 어레이를 최적화 할만큼 충분히 똑똑합니까? –