170 похожих чатов

Есть что то плохое если метод возвращает && на свое

поле?

26 ответов

37 просмотров

Если этот метод помечен как &&, то ничего плохого

Maus Grau
А если нет?

Скорее всего это плохо продуманный метод

Alexander Karaev
Если этот метод помечен как &&, то ничего плохого

Кажется, в таком случае нужен возврат значения, а не &&, иначе всё взорвётся на первом же временном объекте. Если честно, я особо и не вспомню, когда мне нужен был возврат rvalue reference из функции/метода, так что к такому коду я бы отнёсся с подозрением

Maus-Grau Автор вопроса
Ofee Oficsu
Кажется, в таком случае нужен возврат значения, а ...

Есть буффер аккумулирующий в себя данные через преобразователь и потом мне все эти обертки/преобразователи не нужны и нужно вынуть данные, но копировать дорого.

Maus-Grau Автор вопроса
Ofee Oficsu
Кажется, в таком случае нужен возврат значения, а ...

На счет взрыва, вроде ничего такого нет, после мута обьект все равно в валидном состоянии и спокойно удалится.

Ofee Oficsu
Кажется, в таком случае нужен возврат значения, а ...

Как говорит Владимиров: если вы возвращаете r-value,то: 1. Вы пишете std::move 2. Вы пишете std::forward 3. Вы пишете declval 4. Вы пишете && аннотированный метод класса 5. Вы делаете что-то не так

Maus Grau
Есть буффер аккумулирующий в себя данные через пре...

Возвращайте из функции по значению, но делайте return std::move(...);. Здесь не будет копирования, как и риска, что ссылка провиснет

Maus-Grau Автор вопроса
d7d1cd
Как говорит Владимиров: если вы возвращаете r-valu...

Я делаю так: data&& class::dt() &&; data&& get_data(class&& cz) { return class.dt(); }

Maus Grau
Я делаю так: data&& class::dt() &&; data&& get_d...

Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!

Ofee Oficsu
Возвращайте из функции по значению, но делайте ret...

Вот на счёт этого есть нюансы: https://en.cppreference.com/w/cpp/language/copy_elision

d7d1cd
Как говорит Владимиров: если вы возвращаете r-valu...

@d7d1cd, @Mouse_Grays, из && аннотированного класса как раз нельзя возвращать rvalue-ref: auto&& ref = Class{}.get_data(); Всё взорвалось, ошибки нет. Как раз наоборот, только из lvalue qualified метода есть смысл возвращать rvalue-ссылку

Maus-Grau Автор вопроса
Aliaksandr Onishchuk
Вот на счёт этого есть нюансы: https://en.cpprefer...

Этот нюанс не относится к обсуждаемому вопросу, поскольку это один из тех редких примеров, где std::move как раз необходим для обеспечения корректности. NRVO не имеет смысла для полей или глобальных объектов

Ofee Oficsu
@d7d1cd, @Mouse_Grays, из && аннотированного класс...

С одной стороны, я согласен с логикой, что для принимающей стороны возврат по значению удобнее, чем по &&. С другой стороны, мы теряем симметрию: вспоминаем 4 перегрузки и deducing this, где сохраняется ссылочность/constness

Ofee Oficsu
@d7d1cd, @Mouse_Grays, из && аннотированного класс...

Почему нельзя? Вот тут Владимиров показывает, что можно. Или я чегой-то не так понял?

Alexander Karaev
С одной стороны, я согласен с логикой, что для при...

Проблема в том, что возврат своего же rvalue-ref аргумента по ссылке является ошибкой вне зависимости от того, метод это или свободная функция: // плохо auto&& foo(Bar&& bar) { return std::move(bar).baz; } В случае метода ничего принципиально не меняется: struct Bar { std::string baz; // плохо auto&& foo() && { return std::move(*this).baz; // или return std::move(baz); } } Мне кажется, что правильное определение выглядит вот так: struct Bar { std::string baz; // плохо auto&& foo() & { return std::move(*this).baz; } // потому что не имеет смысла auto&& foo() const & = delete; auto&& foo() const && = delete; // потому что опасно auto&& foo() && = delete; // или std::ranges::dangling foo() &&; };

d7d1cd
Почему нельзя? Вот тут Владимиров показывает, что ...

На следующем слайде он говорит, что ссылка всегда провисает, и нужно стараться не возвращать правые ссылки Мне кажется, там есть какая-то путаница в лекции

Ofee Oficsu
На следующем слайде он говорит, что ссылка всегда ...

Он на том слайде говорит "старайтесь не возвращать правые ссылки ни откуда, кроме && аннотированных методов".

Maus-Grau Автор вопроса
Ofee Oficsu
@d7d1cd, @Mouse_Grays, из && аннотированного класс...

Да, здесь все плохо, даже тупые тесты не проходит

d7d1cd
Он на том слайде говорит "старайтесь не возвращать...

Я считаю, что это ошибочное утверждение в докладе. Лучше открыть вторую ветку комментариев

Ofee Oficsu
Я считаю, что это ошибочное утверждение в докладе....

Ну моих знаний недостаточно, чтобы аргументировать Владимирову, что он не прав )

Maus-Grau Автор вопроса
d7d1cd
Ну моих знаний недостаточно, чтобы аргументировать...

держи, https://godbolt.org/z/K66d95d63, теперь у тебя есть всё что нужно))

Maus Grau
держи, https://godbolt.org/z/K66d95d63, теперь у т...

Оставил комментарий под видео.

Maus-Grau Автор вопроса

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
1
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Карта сайта