Re[20]: Оставаться в С++ или уходить?
От: so5team https://stiffstream.com
Дата: 01.10.19 04:53
Оценка:
Здравствуйте, lpd, Вы писали:

lpd>Реально мув-семантика играет сколько-то заметную роль в конечном общем быстродействии программы очень-очень редко, и это не стоит реализации ее в C++ языке, тем более такой запутанной. Там где это нужно, можно сделать у объекта руками метод Move(), в том числе для push_back().


move-семантика не 100% про производительность. Появление move-семантики оказывает влияние еще и на надежность кода. Так, благодаря move-семантики стало возможно создание moveable но не copyable типов, наглядным примером которого является unique_ptr. Стало возможно явно передавать владение тем или иным ресурсом.

Как следствие из этого теперь можно писать, например, так:
std::ifstream infile = open_input_file(...); // Бросает исключение при ошибке.
std::ofstream outfile = open_output_file(...);
...

вместо
std::ifstream infile;
open_input_file(infile);
std::ofstream outfile;
open_output_file(outfile);

И даже если исключения в проекте запрещены, благодаря move-семантике можно писать:
expected<std::ifstream> infile = open_input_file(...);
if(infile) {
   expected<std::ofstream> outfile = open_output_file(...);
   if(outfile) {
      ...
   }
}

А если добавить сюда еще и лямбды, то можно дойти и до такого:
open_input_file(...).on_success([&](auto & infile) {
   open_output_file(...).on_success([&](auto & outfile) {
      ...
   });
});

Так что совокупность новых возможностей C++ позволяет теперь писать на C++ совсем в другом стиле (естественно, можно и переборщить).

Но в Rust-е с move-семантикой пошли еще дальше.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.