Вопросы по ООП в MQL5 - страница 89

 
Если у структуры одно поле, то нормально. А если больше, то бессмысленно и даже глупо. 
 
Dmitry Fedoseev:
Если у структуры одно поле, то нормально. А если больше, то бессмысленно и даже глупо. 

Кому может понадобиться структура с одним полем? В чем сия "структурность" помогает?

 
Mikhail Dovbakh:

Кому может понадобиться структура с одним полем? В чем сия "структурность" помогает?

структура обертка над массивом

MQL не умеет работать с указателями, но умеет работать со структурами без ограничений, поэтому приходится оборачивать массив в структуру

 
Igor Makanu:

структура обертка над массивом

MQL не умеет работать с указателями, но умеет работать со структурами без ограничений, поэтому приходится оборачивать массив в структуру

не проще ли тогда в класс обернуть. Все-ж структура это в первую очередь преимущество при работе со статичным списком данных. К тому же при работе с динамической структурой потом не удобно её приземлять

 
Alexandr Andreev:

не проще ли тогда в класс обернуть. Все-ж структура это в первую очередь преимущество при работе со статичным списком данных. К тому же при работе с динамической структурой потом не удобно её приземлять

проще

причем чтобы не плодить типы, сделал класс в котором описал в секции public структуры, частично эти типы использую за пределами класса, 

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

 
Mikhail Dovbakh:

Кому может понадобиться структура с одним полем? В чем сия "структурность" помогает?

Это был.. это.. как его там... риторический тезис))

А впрочем, бывает полезно один массив поместить в структуру, а потом массив из этих структур использовать.

 
Нормально работает. Только момент один есть. При возврате из функции структуры, возвращается не структура, созданная внутри функции, а копия этой структуры, то есть, запускается неявный конструктор копирования.
 
Vladimir Simakov:
Нормально работает. Только момент один есть. При возврате из функции структуры, возвращается не структура, созданная внутри функции, а копия этой структуры, то есть, запускается неявный конструктор копирования.
Лишнего копирования нету, структура создаётся в стэке, из неё копируется нужное поле.
 
Aliaksandr Hryshyn:
Лишнего копирования нету, структура создаётся в стэке, из неё копируется нужное поле.
Это если компилятор соптимизирует. А так, при вызове f(), произойдет следующее. Указатель вершины стека смещается на размер структуры (сюда вернется результат). На стек поднимается код функции. Далее, в процессе выполнения, доходим до объявления структуры. Указатель стека опять смещается на ее размер. Вот эта структура и заполняется функцией. Перед выходом из функции происходит копирование памяти, выделенной под структуру в функции в выделенную для возврата.
 
Vladimir Simakov:
Это если компилятор соптимизирует. А так, при вызове f(), произойдет следующее. Указатель вершины стека смещается на размер структуры (сюда вернется результат). На стек поднимается код функции. Далее, в процессе выполнения, доходим до объявления структуры. Указатель стека опять смещается на ее размер. Вот эта структура и заполняется функцией. Перед выходом из функции происходит копирование памяти, выделенной под структуру в функции в выделенную для возврата.
Скорее всего оптимизирует.
Причина обращения: