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

 
fxsaber #:

你自己报告了第四个错误。为什么ZeroMemory比{}差?也就是说,我们有一些未经授权的访问私有的机制,由于某种原因,编译器没有检测到。

你认为开发商不会解决这个问题吗?在一个时期,编译器对ZeroMemory没有反应

 
A100 #:

你自己报告了第四个错误。为什么ZeroMemory比{}差?也就是说,我们有一些未经授权的访问私人的机制,而编译器由于某种原因无法检测到。

我不认为这是个错误。该结构没有构造函数,但它正在被初始化。FileReadStruct - 这是一个非常可怕的东西...

 
fxsaber #:

我不认为这是个错误。该结构没有构造函数,它被初始化了。那么FileReadStruct就是一个相当可怕的东西。

uint  FileReadStruct( 
   int          file_handle,        // handle файла 
   const void&  struct_object,      // структура, куда происходит считывание 
   int          size=-1             // размер структуры в байтах 
   );

从描述来看--这是 某种自欺欺人的行为

 
A100 #:

从描述来看, 听起来像是某种自欺欺人的行为。

嗯,是的--这都是骗人的。

 
A100 #:

从描述上看,这是 某种自毁形象的行为

提到文件而不考虑复制粘贴的人工制品--奇怪。

 
fxsaber #:

链接到文档而不考虑复制粘贴的工件--奇怪。

我完全是第一次看到这个功能--他们可以通知我,在描述中存在一个错误

除了描述之外,还有一个结构性错误。

struct X {
    X( int i ) : i( i ) {}
    const int i;
};
void OnStart()
{
    X x( 5 );
    FileReadStruct( 0, x, -1 ); //(1) нормально ???
    ZeroMemory( x );            //(2) Error: 'x' - not allowed for objects with protected members or inheritance
}

为什么ZeroMemory比FileReadStruct差?

另一个希望是开发者不会注意到它,会推迟它,或者懒得去修复它(强调这一点)?

我的论点很简单:ZeroMemory曾一度在编译时带有所有这些(包括私有的),但他们注意到了这一点,他们掌握了这一点并加以修正。

 
A100 #:

这是我第一次看到这个功能--他们可以告诉我描述中存在错误。

我从来没有看过这个功能的描述。从名字上看,一切都很清楚。

除了描述之外,还有一个结构性错误。

以下代码中没有错误。

struct MqlTick2 : private MqlTick {};

void OnStart()
{
  MqlTick2 Ticks[4] = {};

  uchar Bytes[];
  
  StructToCharArray(Ticks[0], Bytes);
  CharArrayToStruct(Ticks[1], Bytes);

  FileReadStruct(0, Ticks[0]);
  FileWriteStruct(0, Ticks[1]);
  
  FileWriteArray(0, Ticks);
  FileReadArray(0, Ticks);
}

厌倦不会赢过便利!


为什么ZeroMemory比FileReadStruct差?

你很喜欢提到文件。这说明了关于ZeroMemory的局限性的一切。但它没有说任何关于文件*的限制。至于ZeroMemory,我以我所得到的东西来判断。现在不方便了,但这似乎是故意的。

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


这个主题是关于MQL5的特殊性。 指出了一个(它在MQL4中不起作用)。不幸的是,这种对话是在浪费时间

 
fxsaber #:

以下代码中没有错误。

你很喜欢参考文件。这说明了ZeroMemory在这方面的局限性。但它没有说任何关于文件*的限制。至于ZeroMemory,我靠的是我所拥有的。现在不方便了,但这似乎是故意的

如果你比较这两个函数,FileReadStruct只对简单的结构工作。这是一个基本的原则差异。

有一个错误(目前编译器只是没有通知我们),它是这样的:类外部 的一些函数(即FileReadStruct)可以直接访问这个类的受保护成员,这与私有、保护的概念相矛盾

那么这个函数比ZeroMemory和其他数百个函数 好在哪里呢?什么都没有!- 开发商只是还没有开始行动。ZeroMemory 之前也没有在文档中说明任何限制但它现在就在那里--并不是因为它给你带来了一些不便--而是因为一个单一的原则在起作用--无论是FileReadStruct还是ZeroMemory,或者其他数百个类似的函数--都是平等的

 
A100 #:

其他一百个类似的功能都是一样的

文件加载/文件保存到不平等箱。

方便是不会赢的!

没有理由向自己的脚开枪。

 
fxsaber #:

文件加载/文件保存更多的是在不平等的盒子里。

没有理由向自己的脚开枪。

是你在自取灭亡--通过宣布私有化。你对自己的访问是有限的,然后会想为什么需要公共访问的外部功能的代码突然停止工作了