شرح - while loop c++ example program




لحلقة داخل الحمالات مجعد الخاصة بها (3)

إنه نطاق كتلة يتميز بأقواس {} . وعادة ما يتم استخدامه لتحديد مساحة التخزين التلقائي . في حالتك ، لا يبدو أنها تفعل أي شيء لأن حلقة for لها نطاقها الخاص في C ++ القياسي.

لقد جئت عبر هذا المخطط for-loop:

#include <iostream>
int main()
{
    {
        for (int i = 0; i != 10; ++i)
        {
            std::cout << "delete i->second;" << std::endl;
        }
    }

    {
        for (size_t i = 0; i < 20; ++i)
        {
            std::cout << "delete m_indices[i];" << std::endl;
        }
    }
    return 0;
}

كنت أتساءل ما هي هذه الطبقة الإضافية من الأقواس؟ هذا يظهر عدة مرات في قاعدة الشفرة الخاصة بنا.


ذات مرة ، قبل أقمار كثيرة ، كان VS6 موجودًا VS6 . ومع ذلك فشلت في الامتثال لعدد من معايير C ++ ؛ الذي كان معقولًا في الوقت الذي تم إصداره قبله (في نفس العام) تم إصدار المعيار رسميًا ؛ ومع ذلك لم تلتزم مشروع المعيار بقدر ما أعرف.

كان أحد المعايير التي تم تغييرها بين المسودة والمعيار الرسمي هو عمر متغيرات الحلقة التي تم إنشاؤها في القسم الأول ؛ مما يؤدي إلى فشل التعليمات البرمجية التالية في الترجمة

{
    for (int i=0; i<1; ++i){}
    for (int i=0; i<2; ++i){}
}

لأنني أعيد تعريفها بالحلقة الثانية.

بينما عانى المترجمون الآخرون من هذا الخطأ. أسلط الضوء على الإصدار VS6 لأنه ظل الإصدار الوحيد من الاستوديو المرئي لعدد من السنوات بعد إصدار المعيار ، لكنه لم يصدر تحديثًا لهذه المشكلة بالتحديد ؛ وهذا يعني أنه كان له تأثير أكثر أهمية.

أحد الحلول لهذا هو إجبار الكل على تنفيذ الحلقة في نطاقها الخاص كما أظهرت.


في المثال الخاص بك لا يوجد سبب لهم.

في بعض الأحيان قد ترغب في إنشاء نطاق لمتغير:

float average;
// ...

{
int sum = 0;
for (int i = 0; i < count; ++i)
{
   sum += v[i];
}
average = (float)sum / count;
}

// use average
// sum not in scope here

ومع ذلك أرى أن هذا نمط مضاد. عادةً إذا وجدت نفسك بحاجة إلى القيام بذلك ، فعلى الأرجح أن تكون الوظيفة هي وظيفتها الخاصة.







scope