История изменений
Исправление alysnix, (текущая версия) :
Там перемещение - это основная форма передачи параметров, в отличие от C++.
ты с С++ разберись сначала. передача структурного параметра может быть как по значению, так по ссылке или указателю.
По значению передают нубы, что не видят разницы.
Классически структурные параметры передаются по ссылке в любых языках, в некоторых только по ссылке(адресу), там где только одна форма передачи параметров.
прямое копирование получается в с++ там, где передается по ссылке, но значение временное типа
some_fun(some_type(10));
тут есть значение some_type(10), адрес которого передается в some_fun. само это значение хранится на стеке вызывающего. фактически это такой код.
{
some_type ___hidden_value__(10);
some_fun(__hidden_value__);
}
теперь, если some_fun нужно внутри себя получить копию hidden_value по классическому подходу надо скопировать его к себе со стека вызывающего, используя переданный адрес.
по подходу с «перемещением», можно просто обменять две переменные.
это единственное место, где перемещение достаточно корректно.
в других местах оно может порождать всякие неожиданные эффекты, и я же говорю не про передачу параметров, а про явный std::move.
P.S. Кстати, есть мнение, что одна из причин, почему у программистов получаются медленные программы на С++ - это то, что там копирование идет по умолчанию
просто никто из даже мидлов не применяет копирование жырных обьектов(то есть структурных). а передают ссылки или указатели. то есть адреса. любой, кто явно копирует обьекты неизвестного ему размера - просто дурачок. это плохой код, и его надо править.
в расте для дурачков ввели костыль - clone. так он весь в костылях.
Исправление alysnix, :
Там перемещение - это основная форма передачи параметров, в отличие от C++.
ты с С++ разберись сначала. передача структурного параметра может быть как по значению, так по ссылке или указателю.
По значению передают нубы, что не видят разницы.
Классически структурные параметры передаются по ссылке в любых языках, в некоторых только по ссылке(адресу), там где только одна форма передачи параметров.
прямое копирование получается в с++ там, где передается по ссылке, но значение временное типа
some_fun(some_type(10));
тут есть значение some_type(10), адрес которого передается в some_fun. само это значение хранится на стеке вызывающего. фактически это такой код.
{
some_type ___hidden_value__(10);
some_fun(__hidden_value__);
}
теперь, если some_fun нужно внутри себя получить копию hidden_value по классическому подходу надо скопировать его к себе со стека вызывающего, используя переданный адрес.
по подходу с «перемещением», можно просто обменять две переменные.
это единственное место, где перемещение достаточно корректно.
в других местах оно может порождать всякие неожиданные эффекты, и я же говорю не про передачу параметров, а про явный std::move.
P.S. Кстати, есть мнение, что одна из причин, почему у программистов получаются медленные программы на С++ - это то, что там копирование идет по умолчанию
просто никто из даже мидлов не применяет копирование жырных обьектов(то есть структурных). а передают ссылки или указатели. то есть адреса. любой, кто явлно копирует обьекты неизвестного ему размера - просто дурачок. это плохой код, и его надо править.
в расте для дурачков ввели костыль - clone. так он весь в костылях.
Исходная версия alysnix, :
Там перемещение - это основная форма передачи параметров, в отличие от C++.
ты с С++ разберись сначала. передача структурного параметра может быть как по значению, так по ссылке или указателю.
По значению передают нубы, что не видят разницы.
Классически структурные параметры передаются по ссылке в любых языках, в некоторых только по ссылке(адресу), там где только одна форма передачи параметров.
прямое копирование получается в с++ там, где передается по ссылке, но значение временное типа
some_fun(some_type(10));
тут есть значение some_type(10), адрес которого передается в some_fun. само это значение хранится на стеке вызывающего. фактически это такой код.
{ some_type _hidden_value(10); some_fun(hidden_value); }
теперь, если some_fun нужно внутри себя получить копию hidden_value по классическому подходу надо скопировать его к себе со стека вызывающего, используя переданный адрес.
по подходу с «перемещением», можно просто обменять две переменные.
это единственное место, где перемещение достаточно корректно.
в других местах оно может порождать всякие неожиданные эффекты, и я же говорю не про передачу параметров, а про явный std::move.
P.S. Кстати, есть мнение, что одна из причин, почему у программистов получаются медленные программы на С++ - это то, что там копирование идет по умолчанию
просто никто из даже мидлов не применяет копирование жырных обьектов(то есть структурных). а передают ссылки или указатели. то есть адреса. любой, кто явлно копирует обьекты неизвестного ему размера - просто дурачок. это плохой код, и его надо править.
в расте для дурачков ввели костыль - clone. так он весь в костылях.