2014-11-28 2 views

답변

3

녹 참조 당신이 튜플의 첫 번째 요소에 대한 포인터를 가지고 슬라이스로 변환 할 수 있도록, 연속 레이아웃 및 정의 순서를 한 것으로 defines 튜플 :

#![feature(tuple_indexing)] 

use std::slice; 

fn main() { 
    let t = (1u8, 2u8, 3u8); 
    let f: *const u8 = &t.0; 
    let s = unsafe { slice::from_raw_buf(&f, 3) }; 
    println!("{}", s); // [1, 2, 3] 
} 

이 또한 this RFC이지만, 꽤 오래 전에 폐쇄되었습니다.

+0

감사! 나는 안전하지 않을 것이라고 생각했다 ... 사람들이 이것을 전혀하지 못하게하는 데 도움을줌으로써, 이것은 기본적인 안전하지 않은 포인터를 던지는 법을 수행하는 좋은 예이다. –

3

대부분의 경우이 작업을 수행하는 것은 의미가 없습니다. 같은 크기의 튜플과 고정 크기 배열의 주된 차이점은 튜플이 이기종 요소를 지원하는 반면 배열은 같은 유형의 요소를 포함한다는 것입니다. 슬라이스는 메모리에서 연속하는 ~ 같은 유형의 값 배열에 대한 뚱뚱한 포인터입니다. 따라서 일부 튜플에 대해 의미가있을 수 있지만 일반적으로 그렇지 않으므로 슬라이스 작업이 튜플에서 지원되지 않습니다.

관련 문제