Ошибки, баги, вопросы - страница 2419
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Как вы смотрите на то, чтобы добавить в язык возможность передачи аргумента как r-value? Это сразу решит все вопросы и позволит создавать универсальные контейнеры для любых типов.
как? ) для универсальных контейнеров нужны ссылки и стрелки а не вот это вот все.
да и средний юзер здесь не тот, чтобы r-value делать.
Как вы смотрите на то, чтобы добавить в язык возможность передачи аргумента как r-value? Это сразу решит все вопросы и позволит создавать универсальные контейнеры для любых типов. Вот в частности указанный выше метод будет перегружен для r-value:
Именно так и реализовано во всех STL-контейнерах.
И второй плюс: это позволит задавать конструкторы перемещения. Сейчас этого тоже очень не хватает, в частности для реализации умных указателей unique_ptr и прочих классов, призванных монопольно хранить внутри себя некий уникальный ресурс, т.е. обычные конструкторы копирования для них неприемлемы.
Каков тогда смысл в передаче параметра по ссылке?
Каков тогда смысл в передаче параметра по ссылке?
Каков тогда смысл в передаче параметра по ссылке?
Я тоже не очень понял вопроса, о какой именно ссылке вы говорите. Изначально шёл разговор о том, что l-value ссылки (доступные в MQL) не покрывают всех потребностей, что и было продемонстрировано невозможностью передачи константы или значения выражения в такую функцию. Для этих целей и нужна r-value ссылка, которая примет все остальные типы. Таким образом сочетание двух перегруженных функций для r-value и l-value обеспечит приём всех типов аргументов, независимо от их происхождения.
То что вы сказали, мол константа нигде не хранится, а создаётся на лету, то это и означает, что она должна передаваться в виде r-value, а не l-value (в отличие от C++). Разницы принципиальной нет, в каком виде оно интерпретируется, главное чтобы её можно было принять в функции.
То что вы сказали, мол константа нигде не хранится, а создаётся на лету, то это и означает, что она должна передаваться в виде r-value, а не l-value (в отличие C++). Разницы принципиальной нет, в каком виде оно интерпретируется, главное чтобы можно было её принять в функции.
ну вообще-то r-value ссылка подразумевает наличие объекта для которого будет делаться перемещение. т.е. временный объект все равно надо создавать.
ну вообще-то r-value ссылка подразумевает наличие объекта для которого будет делаться перемещение. т.е. временный объект все равно надо создавать.
Ну понятное дело, объект всегда где-то имеется. Я и написал, что этот объект создаётся на лету, т.е. временный.
Но я кажись понял, что спрашивал Слава. Он имел ввиду, зачем принимать временный объект по ссылке, если можно принять по значению.
Так вот дело в том, что перегружать функцию одновременно для ссылки и для значения невозможно в одном скопе:
что и делает проблематичным написание универсальных решений. А заменив значение на r-value, получим рабочий вариант:
template<typename T> void f(T &&) { } template<typename T> void f(T const&) { }
Он имел ввиду, зачем принимать временный объект по ссылке, если можно принять по значению.
потому что
и потому что по ссылке обычно передавать что-то удобнее чем по значению.
а если метод шаблонный (с чего собственно и пошла пьянка) то текущее поведение просто не дает нормально писать.
а если метод шаблонный (с чего собственно и пошла пьянка) то текущее поведение просто не дает нормально писать.
что и делает проблематичным написание универсальных решений. А заменив значение на r-value, получим рабочий вариант:
на самом деле нет )
move семантика предполагает указание перемещаемому объекту, что ему не надо удалять внутренности. если объект константный, потребуется mutable член класса, mql такого не поддерживает
на самом деле нет )
move семантика предполагает указание перемещаемому объекту, что ему не надо удалять внутренности. если объект константный, потребуется mutable член класса, mql такого не поддерживает