3 / 3 / 0
Регистрация: 15.08.2014
Сообщений: 378
|
||||||
1 | ||||||
Как работает перемещение и rvalue в моем примере ?06.07.2024, 22:17. Показов 1493. Ответов 22
Метки нет (Все метки)
Добрый вечер!
Помогите, пожалуйста, понять rvalue и семантику перемещения на следующем примере: насколько я понимаю такого рода пример должен приводить к перемещению значения строки s, т.е. она должна остаться пустой, однако этого не происходит. Почему ? В этом примере это вообще невозможно, он некорректен ? Или возможно, но я что-то не так сделал ?
0
|
06.07.2024, 22:17 | |
Ответы с готовыми решениями:
22
Объясните как работает полиморфизм на моем примере Объяснить как работает рекурсивная функция и стек вызовов на моем примере Обращение к модулю по имени. В скачанном примере работает, в моём нет Как использовать пример наследование моем примере? Обьясните как дублировать...на моём примере пожалуйста!!! |
Вездепух
12792 / 6669 / 1795
Регистрация: 18.10.2014
Сообщений: 16,876
|
|
08.07.2024, 22:04 | 21 |
Если функции
barfoo нет необходимости модифицировать свой параметр, то тогда достаточно одного варианта - barfoo(const A &) .А вот если функции barfoo нужно модифицировать свой параметр, то вариант barfoo(const A &) будет скорее всего вынужден сделать копию своего параметра внутри функции. То есть копирование при этом все-таки будет, просто оно будет упрятано внутрь функции, а не привязано к параметру.В такой ситуации может оказаться разумнее написать просто одну-единственную barfoo(A) вместо двух вариантов, т.е. с передачей по значению. Эффективность варианта barfoo(const A &) при этом не упадет, ибо копирование этот вариант и так делал. Оно теперь просто переместилось на параметр.Эффективность варианта barfoo(A &&) немножко упадет, ибо в исходном варианте перемещение было не нужно, а здесь понадобится одно перемещение. Но в большинстве случаев цента такого перемещения - невелика, а взамен мы получаем одну функцию вместо двух. В случае, когда параметров много, это также позволяет избежать комбинаторного взрыва вариантов.Поэтому общее правило таково: если вам нужно выжать последние такты производительности на основе move semantics, то пишите две функции: const A & и A && . А если такого "выжимания" не требуется (что составляет 99%) - пишите одну с передачей по значению A . Вы получите практически всё от move semantics, но без необходимости писать две функции.
1
|
фрилансер
5846 / 5377 / 1103
Регистрация: 11.10.2019
Сообщений: 14,376
|
|
09.07.2024, 08:06 | 22 |
0
|
Вездепух
12792 / 6669 / 1795
Регистрация: 18.10.2014
Сообщений: 16,876
|
|
09.07.2024, 08:12 | 23 |
Это если функция просто форвардит аргументы дальше. Я же вел речь о ситуации, когда рассматриваемая функция уже является конечным получателем аргументов, т.е. реализует оконечную функциональность, работает с аргументами сама.
0
|
09.07.2024, 08:12 | |
09.07.2024, 08:12 | |
Помогаю со студенческими работами здесь
23
Как работать с двумерными массивами через указатель на моем примере? Не работает javasript анимация на моем сайте. На отдельной html странице работает, на моем не хочет Как сделать так, чтобы айдишники самостоятельно проставлялись? покажите пожалуйста на моем примере C++ and dll -> нужна консультация на моём примере Какой профит от ssd? На моем реальном примере Диапазон для Switch, именно в моем примере Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |