LINUX.ORG.RU

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

Исправление 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. так он весь в костылях.