mql5语言的特点、微妙之处以及技巧 - 页 212

 
A100 #:

你是在自取灭亡--通过宣布私有化。你已经限制了自己的访问权限,然后会想,为什么在外部函数需要公共访问的地方,代码会突然停止工作?

对我来说,一切都很正常,而且会正常工作。如果你不使用私人物品,这不关我的事。

 
fxsaber #:

它对我来说运作良好,并将继续这样做。如果你不使用私人物品,这不关我的事。

你是在自相矛盾--简单的结构和私人是不相容的东西。

关于交易、自动交易系统和策略测试的论坛

mql5的特殊性,技巧和窍门

fxsaber, 2021.11.17 07:53

如果你比较这两个函数,FileReadStruct只对简单的结构 工作。这是一个根本的区别。

连维基百科都知道:普通数据POD)是现代高级编程语言 中的一种数据类型,它在内存中的字段布局是严格定义的,不需要访问限制自动控制
 
A100 #:

你写的简单结构和私密性是自相矛盾的,它们是不相容的东西。

连维基百科都知道:普通数据POD)是现代高级编程语言 中的一种数据类型,它在内存中具有严格定义的字段布局,不需要限制访问自动控制

不看术语,上下文也很清楚。简单--在任何嵌套层都没有字符串、动态数组或类对象。

有了这个定义,simple总是可以成为一个联合字段。

struct MqlTick2 : private MqlTick {};

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

void OnStart()
{
  UNION u;
  
  ArrayInitialize(u.Bytes, 0); // обнулили u.Tick
}
私有化并不能从外部保证其不变性。而这是一件好事。
 
fxsaber #:

语境很清楚,没有读到术语。简单--没有字符串、动态数组和任何嵌套层的类对象。

有了这个定义,simple总是可以成为一个联合字段。

私有化并不能从外部保证不变性。而这是一件好事。

已经开始混淆要素了--不变性是恒定的,不是私有的

 
A100 #:

你已经开始对基本要素感到困惑了--不变性是恒定的,而不是私有的

你只是不明白是什么意思。也许我没有解释清楚。这已经不重要了。

 
fxsaber #:

它对我来说运作良好,并将继续这样做。如果你不使用私人物品--这不关我的事。

如果你用{}代替ZeroMemory--它不可能完美地工作--我通过具体的例子 向你展示了这一点--没有归零(但你仍然可能认为不是这样。)

 
A100 #:

如果你使用{}而不是ZeroMemory--它不可能完美地工作--我通过具体例子 向你展示了这一点

我只是完全了解我应用的内容、地点和原因。该奇特的情况被说了出来。没有讨论品味的欲望。

 
fxsaber #:

我只是完全了解我应用的内容、地点和原因。具体的情况已经说出来 了。没有讨论品味的欲望。

据此提出了不使用的理由

 
A100 #:

如果你用{}代替ZeroMemory--它不可能完美地工作--我通过具体的例子 向你展示了这一点--没有归零(但你仍然可能认为不是这样。)

对于联盟,我们只初始化第一个成员,交换字段,测试就会运行。
让我们考虑一下,我们是否应该改变这种行为,使其成为大多数用户期望的方式,从而损害速度。


该文件...在隐私和恒定性不存在的时候出现,我们还没有想到要改变这种行为,因为我们认为它并不重要。

 
Ilyas #:

该文件...在隐私和恒定性不存在的时候出现,我们还没有想到要改变 这种行为,因为我们认为它并不重要。

而且不需要改变现有函数的行为--只需添加 新的正确的函数(有一些前缀/后缀),并宣布以前的函数过时,并发出相应的警告即可。