LINUX.ORG.RU

История изменений

Исправление fsb4000, (текущая версия) :

Как компилятор должен действовать при виде такого:

void f(type&& t) { g(t); h(std::move(t)); }

Типа так:

fn f(mut t : SomeType) 
{ 
    g(& mut t); // это если g принимает параметр как t& в С++
    h(t); // это std::move(t)
}

pub fn main() {
    let a = SomeType{v: 0};
    f(a);
}

В расте просто дефолты другие. Для move ничего писать не нужно, но для const& и просто& нужно писать: & и &mut соответсвенно.

Исправление fsb4000, :

Как компилятор должен действовать при виде такого:

void f(type&& t) { g(t); h(std::move(t)); }

Типа так:

fn f(mut t : SomeType) 
{ 
    g(& mut t); // это если g принимает параметр как t& в С++
    h(t); // это std::move(t)
}

pub fn main() {
    let a = SomeType{v: 0};
    f(a);
}

В расте просто дефолты другие. Для move ничего писать не нужно, но для const& и просто& нужно писать: & и &mut соответсвенно.

Исходная версия fsb4000, :

Типа такого: Как компилятор должен действовать при виде такого:

void f(type&& t) { g(t); h(std::move(t)); }
fn f(mut t : SomeType) 
{ 
    g(& mut t); // это если g принимает параметр как t& в С++
    h(t); // это std::move(t)
}

pub fn main() {
    let a = SomeType{v: 0};
    f(a);
}

В расте просто дефолты другие. Для move ничего писать не нужно, но для const& и просто& нужно писать: & и &mut соответсвенно.