ループの後ろで変数を宣言するのか、ループの中で宣言するのか? - ページ 7

 
Alexey Volchanskiy:

コンパイラはローカル変数にも グローバル変数と同じように0をつけると思っている人たちに会っただけです。

そして、コンパイラはワープをしない。

文字列やプリントは、変数を扱う指標にはなりません。

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

possible use of uninitialized variable 'c' tst.mq5 16 10

possible use of uninitialized variable 'e' tst.mq5 20 17

生成されたコード 1 1

0 エラー(s), 2 警告(s), 526 msec 経過 1 3

削除済み  
//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
sum = 894782460
時間 = 371
sum = 894782460

なぜかわからないが、μlは強く(そしてより複雑なrand()の亜種を)追い越すのである。

そして、私にとっては、ループから外すということは明白です。

削除済み  
Alexey Volchanskiy:

コンパイラはローカル変数にも グローバル変数と同じように0をつけると思っている人たちに会っただけです。

そして、コンパイラは何のワラントも出さない。

それとも ......どうだろう。隙あらば悪態をついてもらう...。))))))

 
Сергей Таболин:

それとも ......どうだろう。隙あらばそうやって悪態をつく...。))))))

コンパイラのバージョンが猥雑になっている)
削除済み  
Vict:

時間=1018
sum = 894782460
時間 = 371
sum = 894782460

なぜかわからないが、μlは(より複雑なrand()の亜種を)先取りしているのである。

そして、私にとっては、ループから外すということは明白です。

私はグルではありませんが、ここでは、私の謙虚な意見では、ループ内の変数の宣言は HUGE dealです(そしてそれはもはやHUGE dealではありません) !

ひとつは関数で、ローカルな部分でも、ループは......。

間違っているかもしれません )))))))))))))))))))))))))))))))))))

削除済み  
Dmitriy Skub:
コンパイラのバージョンが猥雑になっている)

と喜んでいます )))))))))))))))))))))))))))))))))))))))))))))ときどきですが ...むしろ何も言わないでほしい )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))

 

これがディベートなら......グルに聞いてみたい。

どちらが「正しい」(最適で読みやすい)か。

for (int i=0;i<Bars();i++)
{
// code
}

または

int i,MaxBars=Bars()-1;
for (i=MaxBars;i>=0;i--;)
{
// code
}

iの順番が無関心だとしたら?

 
Сергей Таболин:

私はグルではありませんが、ここでは、私の謙虚な意見では、ループ内の変数の宣言は HUGE dealです(そしてそれはもはやHUGE dealではありません) !

ひとつは関数で、ローカルな部分でも、ループは......。

間違っているかもしれません )))))))))))))))))))))))))))))))))))

ありえないが、確実に間違っている。ほんの一例です。オープンポジションをループさせるのです。ポジションチケットを取得し、それを使って他のポジションプロパティを取得する。ポジションプロパティ取得の各関数内でPositionGetTicket(i)を挿入するか、一旦変数に書き込んで使用するかの2通りがあります。しかし、ループを抜けると、このチケットは不要になる...。この変数をOnTick()関数の本体で、あるいはさらに興味深いことにグローバルレベルで宣言する理由は何でしょうか。
 
Mikhail Dovbakh:

これがディベートなら......グルに聞いてみたい。

どちらが「正しい」(最適で読みやすい)か。

または

iの順番が無関心だとしたら?

余分な変数がないので、私は、最初のオプションを考える、彼らだけでなく、メモリを使用しますが、私のために、コードを乱雑に - もっと読むが、それはあなたが関数はほとんど使用されていない場合、イミテーションを呼び出す関数に依存し、時にはそれは、あなたがタスクの意味で名前を持つ変数を宣言した場合、より読みやすくなります......。全体として、これは創造的な問題である ))))

が、一般的には、聞く耳を持たず、好きなように書けばいい、自分の都合のいいように言葉を 使えばいいのです

SZZ:マイクロソフトの例を見て、スタイルは主に - 変数を使用して一度に宣言し、基本的にローカルスコープを取得しますが、狂信せずに))。

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
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.
 
Mikhail Dovbakh:

これがディベートなら......グルに聞いてみたい。

どちらが「正しい」(最適で読みやすい)か。

または

iの順番が無関心だとしたら?

もし無関心なら。

int i = Bars();

while(i-- > 0) 

{

// code

}

.