Size: a a a

2020 March 25

ПК

Побитый Кирпич in pro.cxx
А если его не будет до с++20, то компилятор сам запилит мув. В этом и поинт предупреждения! Ты лишаешь компилятор возможности nrvo, форсируя мув
источник

K

Konstantin in pro.cxx
тогда понятно
источник

AT

Andrew Titov in pro.cxx
Побитый Кирпич
Nrvo обязателен с с++20 вроде
источник

ПК

Побитый Кирпич in pro.cxx
Да, это в с++23 значит
источник

ПК

Побитый Кирпич in pro.cxx
источник

A

AntiSpamBot in pro.cxx
This is spam protection. You have 30 seconds to press the button or you will be banned!
источник

ИI

И Ivan in pro.cxx
А скажите, в приличном обществе можно говорить "корутины"? Или только "сопрограммы"? Или както вообще по-другому?
источник

ПК

Побитый Кирпич in pro.cxx
И Ivan
А скажите, в приличном обществе можно говорить "корутины"? Или только "сопрограммы"? Или както вообще по-другому?
Эти два варианта, для кого как ближе
источник

NI

Nikita Ivanov in pro.cxx
ведите себя осторожно с этими кодами c++
источник

A

Alex in pro.cxx
Побитый Кирпич
А если его не будет до с++20, то компилятор сам запилит мув. В этом и поинт предупреждения! Ты лишаешь компилятор возможности nrvo, форсируя мув
Я не понимаю, почему так. Это же логично возвращать через move: вызывающий код всё равно конструирует этот объект, так пусть конструирует из rvalue. А если возвращаемый объект и так rvalue, то move не должен ни на что влиять. Почему же он мешает?
источник

ПК

Побитый Кирпич in pro.cxx
Alex
Я не понимаю, почему так. Это же логично возвращать через move: вызывающий код всё равно конструирует этот объект, так пусть конструирует из rvalue. А если возвращаемый объект и так rvalue, то move не должен ни на что влиять. Почему же он мешает?
Потому что для rvo тип возвращаемого значения из функции должен совпадать с типом, который ты отдаешь return
источник

A

Alex in pro.cxx
Спасибо, тогда другой вопрос: раз уж компилятор в принципе умеет оптимизировать возврат, почему на это так много ограничений?
источник

ПК

Побитый Кирпич in pro.cxx
Alex
Я не понимаю, почему так. Это же логично возвращать через move: вызывающий код всё равно конструирует этот объект, так пусть конструирует из rvalue. А если возвращаемый объект и так rvalue, то move не должен ни на что влиять. Почему же он мешает?
Copy elision удаляет промежуточный объект, он даже не конструируется, а с мувом у тебя будет два объекта получается. Тот который создаётся и тот из которого ты муваешь. Где же это логично?
источник

ПК

Побитый Кирпич in pro.cxx
return должен работать как inplace конструктор
источник

ПК

Побитый Кирпич in pro.cxx
Alex
Спасибо, тогда другой вопрос: раз уж компилятор в принципе умеет оптимизировать возврат, почему на это так много ограничений?
Тут деталей уже не знаю
источник

A

Alex in pro.cxx
Побитый Кирпич
Copy elision удаляет промежуточный объект, он даже не конструируется, а с мувом у тебя будет два объекта получается. Тот который создаётся и тот из которого ты муваешь. Где же это логично?
Я правильно понял, что когда функция объявляет локальный объект, что-то с ним делает, а потом его возвращает, то на самом деле все действия производятся с объектом, созданным на вызывающей стороне?
источник

A

Alex in pro.cxx
при успешном срабатывании copy elision
источник

ПК

Побитый Кирпич in pro.cxx
Alex
Я правильно понял, что когда функция объявляет локальный объект, что-то с ним делает, а потом его возвращает, то на самом деле все действия производятся с объектом, созданным на вызывающей стороне?
В случае с NRVO я так себе это представляю
источник

AT

Andrew Titov in pro.cxx
Alex
при успешном срабатывании copy elision
Да, но это NRVO, его ещё не завезли.
источник

A

Alex in pro.cxx
сейчас погуглю, в чём разница
источник