Здравствуйте, Shmj, Вы писали:
S>Здравствуйте, T4r4sB, Вы писали:
TB>>Вот тут тоже убери двойной амперсанд. В переменной значение же? Значит так и пиши в объявлении
S>Ну смотрите, получается что обычный возврат return из функции — может порождать копию. Так ведь?
S>Правильно ли я понял, что это благодаря умному компилятору и NRVO ? И всегда ли можно на это рассчитывать, всегда ли имеем 100% гарантию что копия не порождается?
Есть правила когда оптимизация точно сработает.
Есть случаи когда она точно НЕ сработает, и как минимум надо понимать как эта оптимизация устроена технически. Например при возврате поля компилятор не знает нужно ли тебе это поле в дальнейшем, так что если нет то руками ставь std move
И есть случаи когда зависит от компилятора но их сравнительно мало.
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте