Ошибки, баги, вопросы - страница 2199
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Что снова с форумом? Начался день и начались нереальные тормоза. Страницы грузятся то быстро, то в течении секунд 30.
ркн, наверное... с пушами наблюдается проблемы на др сервисах.. вроде как телеграм работает через них..
Нахожусь вне России, сайт все равно иногда подвисает. Но у меня так не один месяц. Привык.
Спасибо! Получается, что return объекта и "=" при определении объекта идут через доп. конструктор.
Хотелось бы на самом деле наглядную таблицу где-то посмотреть, в каких случаях идут вызовы конструкторов (и каких), а в каких - операторов. Сейчас все на уровне интуиции, а она сбоит, конечно.
Вы лучше не очень то расчитывайте на какие-то конкретные правила, компиляторам разрешено весьма вольно оптимизировать такие вещи (rvo, nrvo, copy elision, может ещё какие оптимизации спокойно вырежут лишнее). Копирующий конструктор и оператор "равно" должны делать одни и те же действия (не нужно закладывать в них разное поведение). Есть один хороший подход, называется "copy-and-swap idiom", если позволяет английский, то тут детально описано https://stackoverflow.com/questioncopy-and-swap idioms/3279543/what-is-the-copy-and-swap-idiom.
Если коротко, то пишется одна swap функция, которая используется во всех конструкторах и операторах (мы уменьшаем количество кода, и получаем одинаковое поведение в результате чего не паримся о том, что там компилятор вызовет, вырежет, заоптимизирует).
"Выделенные строки вызывают вопросы. Почему временные объекты не грохнулись сразу, как были использованы? Т.е. до вывода тридцати. "
Правильно вызывают вопросы, думаю. Временные объекты должны были разрушиться после двоеточия.
ЗЫ: я там код немного подправил, т.к. копирующий конструктор (не перемещающий) нужен в любом случае. Для мкл выгода не столь очевидна из-за отсутствия rvalue ссылок.Вы лучше не очень то расчитывайте на какие-то конкретные правила, компиляторам разрешено весьма вольно оптимизировать такие вещи (rvo, nrvo, copy elision, может ещё какие оптимизации спокойно вырежут лишнее). Копирующий конструктор и оператор "равно" должны делать одни и те же действия (не нужно закладывать в них разное поведение). Есть один хороший подход, называется "copy-and-swap idiom", если позволяет английский, то тут детально описано https://stackoverflow.com/questions/3279543/what-is-the-copy-and-swap-idiom.
Если коротко, то пишется одна swap функция, которая используется во всех конструкторах и операторах (мы уменьшаем количество кода, и получаем одинаковое поведение в результате чего не паримся о том, что там компилятор вызовет, вырежет, заоптимизирует).
"Выделенные строки вызывают вопросы. Почему временные объекты не грохнулись сразу, как были использованы? Т.е. до вывода тридцати. "
Правильно вызывают вопросы, думаю. Временные объекты должны были разрушиться после двоеточия.
Спасибо, в СД уже предупредили о планах по RVO.
Что это значит?
Почему скрипт ничего не выводит?
потому что передача указателя а не по значению
Что-то совсем перестал понимать. Вот код
Почему-то ругается на передачу указателя по ссылке. При этом функция f спокойно по ссылке принимает указатель.
Результат
Оператор с int-ом вызвался без проблем, а оператор с указателем - нет.