LINUX.ORG.RU

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

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

А вот как ты сделаешь такое:

В расте нет перегрузки функций. Но вообще пример слишком искусственный и «странный», правильно оно будет вот так:

fn append(a: &mut String, b: char)
{
    a.push(b);
}

fn append_copy(a: &str, b: char) -> String {
    let mut res = a.to_string();
    res.push(b);
    res
}

Это скорее аналог RVO

Нет. Вот это, по твоему, RVO?

let a = vec![1, 2, 3];
let b = a; // move
let c = b; // move

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

А вот как ты сделаешь такое:

В расте нет перегрузки функций. Но вообще пример слишком искусственный и «странный», правильно оно будет вот так:

fn append(a: &mut String, b: char)
{
    a.push(b);
}

fn append_copy(a: &String, b: char) -> String {
    let mut res = a.clone();
    res.push(b);
    res
}

Это скорее аналог RVO

Нет. Вот это, по твоему, RVO?

let a = vec![1, 2, 3];
let b = a; // move
let c = b; // move