Сообщение Re[4]: Вызов функтора для элементов переменного списка парам от 30.03.2017 20:58
Изменено 30.03.2017 20:59 watchmaker
Re[4]: Вызов функтора для элементов переменного списка параметр
Здравствуйте, rg45, Вы писали:
R> зачем-то же эта перегрузка существует?
Она существует для того, чтобы передать информацию о том, что мы вызвали operator() от объекта, который можно курочить как угодно потому что это последний вызов, условно говоря.
Что неправда в вышеприведённом коде.
R>ИМХО, как раз в случае подобном mf3 forward как раз и нужен
Вот более простой пример:
тут содержимое вектора v0 копируется в вектора v1,v2,v3.
А вот в этом коде происходит чёрт знает что:
Но при этом каждая строчка в отдельности — полностью корректная. Но в сумме получается совсем не копирование v0 в v1,v2,v3.
С вызовом operator() всё то же самое. Каждый вызов в отдельности правилен. А вот серия вызовов — уже не всегда.
Спасает этот код лишь то, что rvalue ref-qualifier в программах нечасто используется.
R> зачем-то же эта перегрузка существует?
Она существует для того, чтобы передать информацию о том, что мы вызвали operator() от объекта, который можно курочить как угодно потому что это последний вызов, условно говоря.
Что неправда в вышеприведённом коде.
R>ИМХО, как раз в случае подобном mf3 forward как раз и нужен
Вот более простой пример:
vector<int> v0, v1, v2, v3;
// fill v0
v1 = v0;
v2 = v0;
v3 = v0;
тут содержимое вектора v0 копируется в вектора v1,v2,v3.
А вот в этом коде происходит чёрт знает что:
v1 = std::move(v0);
v2 = std::move(v1);
v3 = std::move(v2);
Но при этом каждая строчка в отдельности — полностью корректная. Но в сумме получается совсем не копирование v0 в v1,v2,v3.
С вызовом operator() всё то же самое. Каждый вызов в отдельности правилен. А вот серия вызовов — уже не всегда.
Спасает этот код лишь то, что rvalue ref-qualifier в программах нечасто используется.
Re[4]: Вызов функтора для элементов переменного списка парам
Здравствуйте, rg45, Вы писали:
R> зачем-то же эта перегрузка существует?
Она существует для того, чтобы передать информацию о том, что мы вызвали operator() от объекта, который можно курочить как угодно потому что это последний вызов, условно говоря.
Что неправда в вышеприведённом коде.
R>ИМХО, как раз в случае подобном mf3 forward как раз и нужен
Вот более простой пример:
тут содержимое вектора v0 копируется в вектора v1,v2,v3.
А вот в этом коде происходит чёрт знает что:
При этом каждая строчка в отдельности полностью корректная. Но в сумме получается совсем не копирование v0 в v1,v2,v3.
С вызовом operator() всё то же самое. Каждый вызов в отдельности правилен. А вот серия вызовов — уже не всегда.
Спасает этот код лишь то, что rvalue ref-qualifier в программах нечасто используется.
R> зачем-то же эта перегрузка существует?
Она существует для того, чтобы передать информацию о том, что мы вызвали operator() от объекта, который можно курочить как угодно потому что это последний вызов, условно говоря.
Что неправда в вышеприведённом коде.
R>ИМХО, как раз в случае подобном mf3 forward как раз и нужен
Вот более простой пример:
vector<int> v0, v1, v2, v3;
// fill v0
v1 = v0;
v2 = v0;
v3 = v0;
тут содержимое вектора v0 копируется в вектора v1,v2,v3.
А вот в этом коде происходит чёрт знает что:
v1 = std::move(v0);
v2 = std::move(v0);
v3 = std::move(v0);
При этом каждая строчка в отдельности полностью корректная. Но в сумме получается совсем не копирование v0 в v1,v2,v3.
С вызовом operator() всё то же самое. Каждый вызов в отдельности правилен. А вот серия вызовов — уже не всегда.
Спасает этот код лишь то, что rvalue ref-qualifier в программах нечасто используется.