Могу ли я строить на месте в Rust? - PullRequest
1 голос
/ 19 июня 2020

Мне нравится emplace() в C ++, который позволяет сэкономить на построении и уничтожении перемещения: например, strings.push_back("abcd"s) означает

построение, перемещение, уничтожение временного

в то время как strings.emplace_back("abcd") - это просто «конструкция».

Можно ли добиться чего-то подобного в Rust (возможно, с оптимизацией компилятора)? Обычный vec.push(String::from("abcd")) выглядит как (в C)

construct + memcpy ()

Меня также интересуют случаи, которые более сложны, чем просто нажатие строки в вектор.

1 Ответ

2 голосов
/ 19 июня 2020

Я думаю, что emplace в основном поддерживается новым размещением в C ++, и аналогичная нестабильная функция была удалена пару лет go из Rust. Поэтому нет, невозможно сделать то же самое с кодом высокого уровня.

Тем не менее, вы все равно можете использовать ptr::write и добиться того же поведения в небезопасном коде.

...