openlang

이 튜플은 왜 문자열을 이동하나요?

let message = String::from("hello");

let pair = (message, message.len());

// 같은 변수 사이에서 소유권이 넘어간다는 게 헷갈려요 즉 처음 message랑 튜플의 message가 전부 같은 message면 ,어떻게 이게 되는 거죠???

영어에서 번역원문 보기

이어지는 대화 2

서로의 근거를 따라
  1. 고유 링크

    기존 변수를 튜플에 넣으면 그 변수의 소유권이 튜플로 넘어가요. 어떤 경우에는 그 일이 일어나는 순서도 중요한데, 이 예제가 바로 그래요. 올린 코드는 다시 접근하기 전에 튜플이 값을 가져가 버려서 컴파일되지 않아요(message.len() 호출이 이동 후에 일어나요). 대신 이렇게 쓰면:

    let message = String::from("hello");
    
    let pair = (message.len(), message);

    튜플이 소유권을 가져가기 전에 message.len()가 실행되므로 컴파일돼요.

    Rust 책의 소유권 장(https://doc.rust-lang.org/book/ch04-01-what-is-ownership.html)도 읽어 보세요. 이해하는 데 도움이 될 거예요.

    영어에서 번역원문 보기

같은 질문의 다른 갈래

  1. 같은 sink 호출인데 한 번은 복사, 한 번은 이동

    Nim 2는 복사냐 이동이냐를 호출 지점마다 정한다. proc 단위로 정하지 않는다. 같은 인자, 같은 proc. 첫 호출은 a가 아직 쓰이니 복사한다. 둘째 호출은 이동한다. 호출 지점에는 어느 쪽인지 아무 표시가 없다.…

    답글 2최근 활동 nim
  2. 정리 블록이 실제로 실행될 때까지 가변 빌림을 미루기

    Rust에서 Java의 try { ... } finally { ... }와 비슷하게 패닉에도 안전한 구조를 만들고, try와 finally 블록이 같은 값을 각각 가변으로 빌리게 하려면 어떻게 해야 하나요? 원하는 건 정상…

    답글 2최근 활동 rust
  3. 포인터를 통해 문자 배열 입력받기

    키보드에서 char 배열들로 입력을 받으려고 하면 프로그램이 계속 죽습니다. 키보드에서 char 배열을 읽어서 저장하는 간단한 방법이 뭘까요?

    답글 2최근 활동 c