在循环后面声明变量还是在循环里面声明变量? - 页 7 1234567891011 新评论 Igor Makanu 2019.08.18 12:33 #61 Alexey Volchanskiy: 刚刚遇到一群人,他们认为编译器对局部变量 的归零就像对全局变量一样。 而且,编译器不会给出清算的结果。 它是这样的,字符串和打印并不是处理变量的指标。 int a; int b; void OnStart() { b=a+100; int c; int d=c+5; for(int i=0;i<10;i++) { int e; int f=i+e; } } 'tst.mq5' tst.mq5 1 1 可能使用未初始化的变量'c' tst.mq5 16 10 可能使用未初始化的变量'e' tst.mq5 20 17 代码生成 1 1 0个错误(s),2个警告(s),526毫秒的时间 1 3 [删除] 2019.08.18 13:11 #62 //c++ int main() { int count= (int)10 e6; { auto t1 = chrono::high_resolution_clock::now(); int sum=0; for (int i=0; i<count; i++) { string st; st = "12345678qwertyuioasdfgh"; sum += st[i%23]; } auto t2 = chrono::high_resolution_clock::now(); auto duration = chrono::duration_cast<chrono::milliseconds>( t2 - t1 ).count(); cout << "time = " << duration << endl; cout << "sum = " << sum << endl; } { auto t1 = chrono::high_resolution_clock::now(); int sum=0; string st = ""; for (int i=0; i<count; i++) { st = "12345678qwertyuioasdfgh"; sum += st[i%23]; } auto t2 = chrono::high_resolution_clock::now(); auto duration = chrono::duration_cast<chrono::milliseconds>( t2 - t1 ).count(); cout << "time = " << duration << endl; cout << "sum = " << sum << endl; } } 时间=1018 总和=894782460 时间 = 371 总和=894782460 我不知道为什么,μl强烈地超过了(以及更复杂的rand()变体)。 而对我来说,这很明显--把它从循环中拿出来。 [删除] 2019.08.18 13:24 #63 Alexey Volchanskiy: 刚刚遇到一群人,他们认为编译器对局部变量 的归零就像对全局变量一样。 而编译器并没有发出任何授权书。 或....我不知道。我一有机会就拿它来发誓,....)))))) Dmitriy Skub 2019.08.18 13:26 #64 Сергей Таболин: 或....我不知道。我一有机会就这样发誓,....)))))) 你有一个淫秽版本的编译器) [删除] 2019.08.18 13:28 #65 Vict: 时间=1018 总和=894782460 时间 = 371 总和=894782460 我不知道为什么,但μl领先于曲线(以及更复杂的rand()变体)。 而对我来说,这很明显--把它从循环中拿出来。 我不是大师,但在这里,以我的愚见,在一个循环中声明变量 是一个巨大的问题(现在已经不是一个巨大的问题了)!!。 一件事是一个函数,甚至是一个局部代码,但loops.... 我可能是错的 )))))))) [删除] 2019.08.18 13:30 #66 Dmitriy Skub: 你有一个淫秽版本的编译器) 而且我很高兴,)))))))))))虽然有时....我宁愿他什么都不说 ))))))))))))))))))))))))))))))) Mikhail Dovbakh 2019.08.18 13:59 #67 如果这是一场辩论--我想问大师。 哪个是 "正确的"(最佳和可读的)。 for (int i=0;i<Bars();i++) { // code } 或 int i,MaxBars=Bars()-1; for (i=MaxBars;i>=0;i--;) { // code } 如果i的顺序是无所谓的? Alexey Viktorov 2019.08.18 13:59 #68 Сергей Таболин: 我不是大师,但在这里,以我的愚见,在一个循环中声明变量 是一个巨大的问题(现在已经不是一个巨大的问题了)!!。 一件事是一个函数,甚至是一个局部代码,但loops.... 我可能是错的 )))))))) 不可能,但肯定是错的。仅举一例。你在开放的位置上进行循环。你得到了一张位置票,用它来获得其他位置属性。有两种变体,要么在获取位置属性的每个函数中插入PositionGetTicket(i),要么把它写在一个变量中,使用它。但当循环退出后,就不需要这个票了。为什么要在OnTick()函数的主体中声明这个变量,或者更有趣的是在全局层面声明? Igor Makanu 2019.08.18 14:34 #69 Mikhail Dovbakh: 如果这是一场辩论--我想问大师。 哪个是 "正确的"(最佳和可读的)。 或 如果i的顺序是无所谓的? 我认为第一种选择,因为没有额外的变量,它们不仅使用内存,而且对我来说,杂乱无章的代码 - 阅读更多,但这取决于你调用的函数imho,如果函数很少使用,那么有时它将是更可读的,如果你声明一个变量的名称在执行任务的意义....。总而言之,这是一个创造性的问题 )))) 但一般来说,不要听他们的,随心所欲地写--为了自己的方便而使用这些语言。 SZZ:看看mikrosoft的例子,风格大多是--使用变量时一次性声明,基本得到局部范围,但不狂热)) void SimpleImage::CalculateDrawingRect() { // Load our bitmap if necessary if (nullptr == m_bitmap) { if (FAILED(LoadBitmapFromShellItem())) { return; } } // Calculate bitmap rectangle float boundingWidth = m_boundingRect.right - m_boundingRect.left; float b oundingHeight = m_boundingRect.bottom - m_boundingRect.top; float w idth = Direct2DUtility::GetRectWidth(m_clipRect); float h eight = Direct2DUtility::GetRectHeight(m_clipRect); if (!m_isHorizontal) { // Swap width and height to calculate boundaries float widthTemp = width; width = height; height = widthTemp; } if (width > boundingWidth) { // Width is larger than bounding box. Scale width to fit float scale = boundingWidth / width; width *= scale; height *= scale; } https://github.com/microsoft Microsoft github.com This repo is the official home of .NET on GitHub. It's a great starting point to find many .NET OSS projects from Microsoft and the community, including many that are part of the .NET Foundation. Alexander Puzanov 2019.08.18 14:59 #70 Mikhail Dovbakh: 如果这是一场辩论--我想问大师。 哪个是 "正确的"(最佳和可读的)。 或 如果i的顺序是无所谓的? 如果无动于衷,那么。 int i = Bars(); while(i-- > 0) { // code } . 1234567891011 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
刚刚遇到一群人,他们认为编译器对局部变量 的归零就像对全局变量一样。
而且,编译器不会给出清算的结果。
它是这样的,字符串和打印并不是处理变量的指标。
'tst.mq5' tst.mq5 1 1
可能使用未初始化的变量'c' tst.mq5 16 10
可能使用未初始化的变量'e' tst.mq5 20 17
代码生成 1 1
0个错误(s),2个警告(s),526毫秒的时间 1 3
时间=1018
总和=894782460
时间 = 371
总和=894782460
我不知道为什么,μl强烈地超过了(以及更复杂的rand()变体)。
而对我来说,这很明显--把它从循环中拿出来。
刚刚遇到一群人,他们认为编译器对局部变量 的归零就像对全局变量一样。
而编译器并没有发出任何授权书。
或....我不知道。我一有机会就拿它来发誓,....))))))
或....我不知道。我一有机会就这样发誓,....))))))
时间=1018
总和=894782460
时间 = 371
总和=894782460
我不知道为什么,但μl领先于曲线(以及更复杂的rand()变体)。
而对我来说,这很明显--把它从循环中拿出来。
我不是大师,但在这里,以我的愚见,在一个循环中声明变量 是一个巨大的问题(现在已经不是一个巨大的问题了)!!。
一件事是一个函数,甚至是一个局部代码,但loops....
我可能是错的 ))))))))
你有一个淫秽版本的编译器)
而且我很高兴,)))))))))))虽然有时....我宁愿他什么都不说 )))))))))))))))))))))))))))))))
如果这是一场辩论--我想问大师。
哪个是 "正确的"(最佳和可读的)。
或
如果i的顺序是无所谓的?
我不是大师,但在这里,以我的愚见,在一个循环中声明变量 是一个巨大的问题(现在已经不是一个巨大的问题了)!!。
一件事是一个函数,甚至是一个局部代码,但loops....
我可能是错的 ))))))))
如果这是一场辩论--我想问大师。
哪个是 "正确的"(最佳和可读的)。
或
如果i的顺序是无所谓的?
我认为第一种选择,因为没有额外的变量,它们不仅使用内存,而且对我来说,杂乱无章的代码 - 阅读更多,但这取决于你调用的函数imho,如果函数很少使用,那么有时它将是更可读的,如果你声明一个变量的名称在执行任务的意义....。总而言之,这是一个创造性的问题 ))))
但一般来说,不要听他们的,随心所欲地写--为了自己的方便而使用这些语言。
SZZ:看看mikrosoft的例子,风格大多是--使用变量时一次性声明,基本得到局部范围,但不狂热))
https://github.com/microsoft如果这是一场辩论--我想问大师。
哪个是 "正确的"(最佳和可读的)。
或
如果i的顺序是无所谓的?
如果无动于衷,那么。
int i = Bars();
while(i-- > 0)
{
// code
}
.