错误、漏洞、问题 - 页 2745 1...273827392740274127422743274427452746274727482749275027512752...3184 新评论 Ilyas 2020.05.20 13:39 #27441 fxsaber: 优化的问题。在测试器中,每打一个勾,我都需要得到一个勾,以便进一步工作。我是这样做的。 很明显,这种变体的速度会比较慢。 但是SymbolInfoTick也比较慢,因为它的字符串参数不是通过引用传递的。 是否可以有一个常规的SymbolInfo*重载,其中字符串是通过引用传递的? 最好能有 在优化器中,这些函数被调用了数百亿次。 调用Symbol()总是扩展到访问全局变量_Symbol,以及Digits(), Point(), Period(), GetLastError(), IsStopped(), UninitializeReason()。 fxsaber 2020.05.20 13:51 #27442 Ilyas: Symbol()调用总是展开访问全局变量_Symbol,Digits()、Point()、Period()、GetLastError()、IsStopped()、 UninitializeReason()也是如此。 那么通过引用传递字符串呢? Sergey Dzyublik 2020.05.20 13:54 #27443 fxsaber: 那么通过引用传递一个字符串呢? 显然,原因是MQL中的一个无法解决的问题--通过const ref将一个字词作为参数传递。 A100 2020.05.20 15:20 #27444 fxsaber: 是否可以有常规的 SymbolInfo* 重载,其中字符串是通过引用传递的? 他们会如何帮助? int SymbolInfoTick( string symbol ) { return 1; } int SymbolInfoTick( string& symbol ) { return 2; } void OnStart() { Print( SymbolInfoTick( _Symbol )); } 它仍然返回1,而不是2 Ilyas 2020.05.20 15:30 #27445 fxsaber: 那么通过引用传递一个字符串呢? 字符串是通过引用传递的。 我们早就改成了 "copy_on_write string"--当把一个字符串复制到另一个内容时,不是立即复制(像以前一样),对字符串缓冲区 的引用数量会增加。例如,当以值传递字符串,作为一个参数时,引用数量会增加,在调用后会减少。 当 一个字符串被改变时,将检查缓冲区的引用计数,如果有一个以上的引用,要改变的字符串将从旧的缓冲区中 "解除链接",并分配一个新的。 Ilyas 2020.05.20 15:31 #27446 A100: 他们将如何帮助? 它仍然返回(调用)1,而不是2 _Symbol变量是常数 A100 2020.05.20 15:37 #27447 Ilyas: _Symbol变量是常数 那么超载也无济于事。 int SymbolInfoTick( string ) { return 1; } int SymbolInfoTick( const string& ) { return 2; } void OnStart() { Print( SymbolInfoTick( _Symbol )); //Error } 在编译时就已经出现了错误 fxsaber 2020.05.20 15:43 #27448 Ilyas: 字符串是通过引用传递的。 我们早就改成了 "copy_on_write string"--当把一个字符串复制到另一个时,内容不会立即被复制(像以前一样),对字符串缓冲区 的引用数量会增加。例如,当按值传递字符串时,引用数量会增加,作为一个参数,在调用后会减少。 当 一个字符串被改变时,将检查缓冲区的引用计数,如果有一个以上的引用,改变后的字符串将从旧的缓冲区中 "解除链接",并为其分配一个新的缓冲区。 这些都是在编译层面定义的吗? Alexey Navoykov 2020.05.21 06:43 #27449 编译器错误。 class CArray { }; int ArraySize(const CArray&); void Main() { CArray arr; ArraySize(arr); // Нормально CArray arrays[1]; ArraySize(arrays[0]); // 'arrays' - array required } Koldun Zloy 2020.05.21 08:01 #27450 fxsaber: 这些都是在编译层面定义的吗? 不,它在编译时还不知道。 1...273827392740274127422743274427452746274727482749275027512752...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
优化的问题。在测试器中,每打一个勾,我都需要得到一个勾,以便进一步工作。我是这样做的。
很明显,这种变体的速度会比较慢。
但是SymbolInfoTick也比较慢,因为它的字符串参数不是通过引用传递的。
是否可以有一个常规的SymbolInfo*重载,其中字符串是通过引用传递的?
最好能有
在优化器中,这些函数被调用了数百亿次。
调用Symbol()总是扩展到访问全局变量_Symbol,以及Digits(), Point(), Period(), GetLastError(), IsStopped(), UninitializeReason()。
Symbol()调用总是展开访问全局变量_Symbol,Digits()、Point()、Period()、GetLastError()、IsStopped()、 UninitializeReason()也是如此。
那么通过引用传递字符串呢?
那么通过引用传递一个字符串呢?
显然,原因是MQL中的一个无法解决的问题--通过const ref将一个字词作为参数传递。
是否可以有常规的 SymbolInfo* 重载,其中字符串是通过引用传递的?
他们会如何帮助?
它仍然返回1,而不是2
那么通过引用传递一个字符串呢?
字符串是通过引用传递的。
我们早就改成了 "copy_on_write string"--当把一个字符串复制到另一个内容时,不是立即复制(像以前一样),对字符串缓冲区 的引用数量会增加
。例如,当以值传递字符串,作为一个参数时,引用数量会增加,在调用后会减少。
当
一个字符串被改变时,将检查缓冲区的引用计数,如果有一个以上的引用,要改变的字符串将从旧的缓冲区中 "解除链接",并分配一个新的。
他们将如何帮助?
它仍然返回(调用)1,而不是2
_Symbol变量是常数
那么超载也无济于事。
在编译时就已经出现了错误
字符串是通过引用传递的。
我们早就改成了 "copy_on_write string"--当把一个字符串复制到另一个时,内容不会立即被复制(像以前一样),对字符串缓冲区 的引用数量会增加
。例如,当按值传递字符串时,引用数量会增加,作为一个参数,在调用后会减少。
当
一个字符串被改变时,将检查缓冲区的引用计数,如果有一个以上的引用,改变后的字符串将从旧的缓冲区中 "解除链接",并为其分配一个新的缓冲区。
这些都是在编译层面定义的吗?
编译器错误。
这些都是在编译层面定义的吗?
不,它在编译时还不知道。