Особенности языка mql5, тонкости и приёмы работы - страница 212

 
A100 #:

Это Вы себе в ногу стреляете - объявлением private. Сами себе ограничили доступ и потом будете удивляться почему код, где внешним функциям нужен public доступ вдруг перестал работать

У меня все отлично работает и будет работать. Не используете private - не мое дело.

 
fxsaber #:

У меня все отлично работает и будет работать. Не используете private - не мое дело.

Вы сами себе противоречите - пишете о простых структурах и private - это несовместимые вещи

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Особенности языка mql5, тонкости и приёмы работы

fxsaber, 2021.11.17 07:53

Если же сравнивать эти две функции, то FileReadStruct работает только с простыми структурами. В этом принципиальное отличие.

Даже в Википедии об этом знают:  Простая структура данных (англ. plain old data, POD) — в современных языках программирования высокого уровня тип данных, имеющий жёстко определённое расположение полей в памяти, не требующий ограничения доступа и автоматического управления.
 
A100 #:

Вы сами себе противоречите - пишете о простых структурах и private - это несовместимые вещи

Даже в Википедии об этом знают:  Простая структура данных (англ. plain old data, POD) — в современных языках программирования высокого уровня тип данных, имеющий жёстко определённое расположение полей в памяти, не требующий ограничения доступа и автоматического управления.

Контекст был понятен без вчитывания в терминологию. Простая - на любом уровне вложения нет строк, динамических массивов и объектов классов.

При таком определении простая всегда может быть полем union.

struct MqlTick2 : private MqlTick {};

union UNION
{
  MqlTick2 Tick;
  uchar Bytes[sizeof(MqlTick2)];
};

void OnStart()
{
  UNION u;
  
  ArrayInitialize(u.Bytes, 0); // обнулили u.Tick
}
private никакой гарантии неизменности со стороны не дает. И это хорошо.
 
fxsaber #:

Контекст был понятен без вчитывания в терминологию. Простая - на любом уровне вложения нет строк, динамических массивов и объектов классов.

При таком определении простая всегда может быть полем union.

private никакой гарантии неизменности со стороны не дает. И это хорошо.

Уже начинаете путаться в элементарном - неизменность - это const, а не private

 
A100 #:

Уже начинаете путаться в элементарном - неизменность - это const, а не private

Вы просто не поняли, что имелось в виду. Возможно, плохо объясняю. Уже не имеет значения.

 
fxsaber #:

У меня все отлично работает и будет работать. Не используете private - не мое дело.

Если Вы используете {} вместо ZeroMemory - то оно не может отлично работать - это я Вам на конкретном примере показал - там обнуления не происходит (но Вы по прежнему можете думать обратное)

 
A100 #:

Если Вы используете {} вместо ZeroMemory - то оно не может отлично работать - это я Вам на конкретном примере показал 

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

 
fxsaber #:

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

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

 
A100 #:

Если Вы используете {} вместо ZeroMemory - то оно не может отлично работать - это я Вам на конкретном примере показал - там обнуления не происходит (но Вы по прежнему можете думать обратное)

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


Функции File... появились, когда приватности и константности не было, пока не думали менять это поведение, т.к. не считаем это критичным.

 
Ilyas #:

Функции File... появились, когда приватности и константности не было, пока не думали менять это поведение, т.к. не считаем это критичным.

А менять поведение существующих функций и не требуется - достаточно добавить новые правильные функции (с каким-нибудь префиксом\суффиксом), а предыдущие объявить устаревшими с выдачей соответствующего предупреждения