Информация об изменениях

Сообщение Re: Передача объекта, возвращаемого функцией, в другую функц от 26.09.2019 18:46

Изменено 26.09.2019 18:51 rg45

Re: Передача объекта, возвращаемого функцией, в другую функц
Здравствуйте, Коваленко Дмитрий, Вы писали:


КД>Есть интерфейс t_errors.

КД>У него две реализации — t_errors_without_limits и t_errors_with_limits
КД>Есть два метода, возвращающие экземпляры этих реализацией:

КД>
КД>t_errors_without_limits get_errors_without_limits();
КД>t_errors_with_limits get_errors_with_limits();
КД>

КД>Теперь есть утилита, работающая с t_errors:
КД>
КД>void add_current_errors(t_errors& errs); //errs внутри не запоминается.
КД>


КД>Все компилируется (VC++) и работает как и ожидается.

КД>При включенном 4-ом уровне предупреждений, компилятор предупреждает, что нельзя передавать по ссылке результат метода.
КД>Когда включаешь режим 'совместимости/соответствия' (Conformance Mode=Yes), компилятор отказывается компилировать.


Да добавь просто перегрузку для rvalue ссылки и всех делов:

void add_current_errors(t_errors& errs); //errs внутри не запоминается.

void add_current_errors(t_errors&& errs) { add_current_errors(errs); }
Re: Передача объекта, возвращаемого функцией, в другую функц
Здравствуйте, Коваленко Дмитрий, Вы писали:

КД>Есть интерфейс t_errors.

КД>У него две реализации — t_errors_without_limits и t_errors_with_limits
КД>Есть два метода, возвращающие экземпляры этих реализацией:
КД>Теперь есть утилита, работающая с t_errors:

КД>
КД>void add_current_errors(t_errors& errs); //errs внутри не запоминается.
КД>


КД>Все компилируется (VC++) и работает как и ожидается.

КД>При включенном 4-ом уровне предупреждений, компилятор предупреждает, что нельзя передавать по ссылке результат метода.
КД>Когда включаешь режим 'совместимости/соответствия' (Conformance Mode=Yes), компилятор отказывается компилировать.

Да добавь просто перегрузку для rvalue ссылки и всех делов:

void add_current_errors(t_errors& errs); //errs внутри не запоминается.

void add_current_errors(t_errors&& errs) { add_current_errors(errs); }