mql5语言的特点、微妙之处以及技巧 - 页 216 1...209210211212213214215216217218219220221222223...247 新评论 fxsaber 2021.11.18 20:03 #2151 Igor Makanu #:ZS: 我还见过这样的宏,如 我不明白。 Igor Makanu 2021.11.18 20:13 #2152 fxsaber #:我不明白。 网上有很多关于这种宏的便利性的信息,谷歌 "宏而0"。 https://russianblogs.com/article/9410298326/ mktr8591 2021.11.18 20:21 #2153 很久以前,在这个主题中就有一个while(0)的例子 https://www.mql5.com/ru/forum/170952/page141#comment_12897922 Особенности языка mql5, тонкости и приёмы работы 2019.07.30www.mql5.com В данной теме будут обсуждаться недокументированные приёмы работы с языком mql5, примеры решения тех, или иных задач... fxsaber 2021.11.18 21:01 #2154 mktr8591 #: 为了明确这一点,它只针对静态的(这都是关于C++的)。对于局部变量,如果有一个用户c-tor,就不会有nulling。 我喜欢这个解释本身,它与OOP没有任何抵触。 当你创建一个简单的结构对象时,会发生以下情况。 内存被分配给该结构 - 任何垃圾都在那里。 构造函数在这块上启动。 当声明经过{}时,在第1-2项之间插入另一个声明--用零填充分配的内存。 在这种逻辑下,OOP并没有受到任何影响。这是一个有效的机制。 A100 2021.11.18 21:46 #2155 fxsaber #: 当{}被声明时,另一个被插入1-2点之间--用零填充分配的内存。 在这种逻辑下,OOP并没有受到任何影响。有效机制。 这里的逻辑受到影响:如果反正会有一个构造函数,我们为什么要把它归零呢? fxsaber 2021.11.18 21:54 #2156 A100 #:逻辑本身在这里受到了影响:如果事后会有一个构造函数,为什么还要清零? 因为带有构造函数的结构不能用于联盟中。 A100 2021.11.18 22:19 #2157 Ilyas #:对于union来说,只初始化第一个成员,交换字段,测试就会运行。 让我们想一想,是否值得改变行为以成为大多数用户所期望的。 考虑到我已经改变了--现在我检查第一项的x[i].i == 0(之前的条件是x[i].x == 0.0)。 union X { int i; double x; }; void OnStart() { X x[10000] = {}; //(*) bool b = true; for ( int i = 0; i < ArraySize(x) && (b = (x[i].i == 0)); i++ ); Print( b ); } 结果:假 而用零内存--真 fxsaber 2021.11.18 22:34 #2158 Igor Makanu #:网上有很多关于这种宏的便利性的信息,谷歌 "宏而0"。https://russianblogs.com/article/9410298326/ 所有这些乱七八糟的东西只是为了在宏的结尾处放一个分号。我在任何地方都使用大括号,没有任何问题。 mktr8591 2021.11.19 13:27 #2159 A100 #:考虑到我已经改变了--现在我检查第一项的x[i].i == 0(以前的条件是x[i].x == 0.0)。结果:假而有了ZeroMemory--真的。 是的,mql错误 (在C++中它返回真)。 fxsaber 2021.11.24 02:46 #2160 我现在(b3110)如何在复杂的结构中归零? struct MqlTick2 : private MqlTick { // string Str; // С этой строкой не обнулить. }; template <typename T> void ZeroMemoryStruct( T &Struct ) { uchar Bytes[sizeof(T)]; ::CharArrayToStruct(Struct, Bytes); } void OnStart() { MqlTick2 Tick; ZeroMemoryStruct(Tick); } 1...209210211212213214215216217218219220221222223...247 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
ZS: 我还见过这样的宏,如
我不明白。
我不明白。
网上有很多关于这种宏的便利性的信息,谷歌 "宏而0"。
https://russianblogs.com/article/9410298326/
很久以前,在这个主题中就有一个while(0)的例子
https://www.mql5.com/ru/forum/170952/page141#comment_12897922
为了明确这一点,它只针对静态的(这都是关于C++的)。对于局部变量,如果有一个用户c-tor,就不会有nulling。
我喜欢这个解释本身,它与OOP没有任何抵触。
当你创建一个简单的结构对象时,会发生以下情况。
当声明经过{}时,在第1-2项之间插入另一个声明--用零填充分配的内存。
在这种逻辑下,OOP并没有受到任何影响。这是一个有效的机制。
当{}被声明时,另一个被插入1-2点之间--用零填充分配的内存。
在这种逻辑下,OOP并没有受到任何影响。有效机制。
这里的逻辑受到影响:如果反正会有一个构造函数,我们为什么要把它归零呢?
逻辑本身在这里受到了影响:如果事后会有一个构造函数,为什么还要清零?
因为带有构造函数的结构不能用于联盟中。
对于union来说,只初始化第一个成员,交换字段,测试就会运行。
让我们想一想,是否值得改变行为以成为大多数用户所期望的。
考虑到我已经改变了--现在我检查第一项的x[i].i == 0(之前的条件是x[i].x == 0.0)。
结果:假
而用零内存--真
网上有很多关于这种宏的便利性的信息,谷歌 "宏而0"。
https://russianblogs.com/article/9410298326/
所有这些乱七八糟的东西只是为了在宏的结尾处放一个分号。我在任何地方都使用大括号,没有任何问题。
考虑到我已经改变了--现在我检查第一项的x[i].i == 0(以前的条件是x[i].x == 0.0)。
结果:假
而有了ZeroMemory--真的。
是的,mql错误
(在C++中它返回真)。