Ошибки, баги, вопросы - страница 2418

 
TheXpert:
как хорошо что создатели других языков менее категоричны по этому поводу

Никакой категоричности. Просто не хотелось бы, чтобы на решение подобной фигни, тратились ресурсы, которых и так не хватает на своевременное закрытие даже багов. Не говоря уже про новый функционал. От анонсов до бета-релизов стало проходить очень много времени. А уж до вылизывания бета-релизов - еще столько же. И не без назойливой помощи форумчан.


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

 
fxsaber:

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

у каждого свои приоритеты.

 

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

Как использовать временную переменную, если она не является результатом выражения?

[Удален]  
Slava:

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

Как использовать временную переменную, если она не является результатом выражения?

Ну это всё тонкости. В плюсах ведь сделали. Для prvalue происходит temporary materialization. Кстати, так ведь тоже нельзя

int get();
void fn(const int &);

fn(get()); // error
 
Igor Zakharov:

Вероятнее всего это момент, когда добавляет ещё один символ (почему не все 5 с начала теста?):

Запросите данные по всем инструментам в OnInit, они сразу подгрузятся.

 
Slava:

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

Как использовать временную переменную, если она не является результатом выражения?

Как вы смотрите на то, чтобы добавить в язык возможность передачи аргумента как r-value?   Это сразу решит все вопросы и позволит создавать универсальные контейнеры для любых типов.  Вот в частности указанный выше метод  будет перегружен для r-value:

void push_back(const T &value);
void push_back(const T&&value);

Именно так и реализовано во всех STL-контейнерах.

И второй плюс:  это позволит задавать конструкторы перемещения.  Сейчас этого тоже очень не хватает, в частности для реализации умных указателей unique_ptr и прочих классов, призванных монопольно хранить внутри себя некий уникальный ресурс,  т.е. обычные конструкторы копирования для них неприемлемы.

 
Alexey Navoykov:

Как вы смотрите на то, чтобы добавить в язык возможность передачи аргумента как r-value?   Это сразу решит все вопросы и позволит создавать универсальные контейнеры для любых типов.

как? ) для универсальных контейнеров нужны ссылки и стрелки а не вот это вот все.

да и средний юзер здесь не тот, чтобы r-value делать.

 
Alexey Navoykov:

Как вы смотрите на то, чтобы добавить в язык возможность передачи аргумента как r-value?   Это сразу решит все вопросы и позволит создавать универсальные контейнеры для любых типов.  Вот в частности указанный выше метод  будет перегружен для r-value:

Именно так и реализовано во всех STL-контейнерах.

И второй плюс:  это позволит задавать конструкторы перемещения.  Сейчас этого тоже очень не хватает, в частности для реализации умных указателей unique_ptr и прочих классов, призванных монопольно хранить внутри себя некий уникальный ресурс,  т.е. обычные конструкторы копирования для них неприемлемы.

Каков тогда смысл в передаче параметра по ссылке?

 
Slava:

Каков тогда смысл в передаче параметра по ссылке?

вы очень странные вопросы задаете. r-value ссылки нужны исключительно для move семантики. обычные ссылки для всего остального.
 
Slava:

Каков тогда смысл в передаче параметра по ссылке?

Я тоже не очень понял вопроса, о какой именно ссылке вы говорите.   Изначально шёл разговор о том, что l-value ссылки (доступные в MQL) не покрывают всех потребностей,  что и было продемонстрировано невозможностью передачи константы или значения выражения в такую функцию.  Для этих целей и нужна r-value ссылка,  которая примет все остальные типы.  Таким образом сочетание двух перегруженных функций для r-value и l-value  обеспечит приём всех типов аргументов, независимо от их происхождения.

То что вы сказали, мол константа нигде не хранится, а создаётся на лету,  то это и означает, что она должна передаваться в виде r-value, а не l-value (в отличие от C++).  Разницы принципиальной нет, в каком виде оно интерпретируется, главное чтобы её можно было принять в функции.