c++ - ما هو عامل التشغيل "->" في C ++؟




10 Answers

أو من أجل شيء مختلف تمامًا ... يتم عرض الشرائح x إلى 0

while (x --\
            \
             \
              \
               > 0)
     printf("%d ", x);

ليس رياضيا ، ولكن ... كل صورة ترسم ألف كلمة ...

c++ operators code-formatting standards-compliance

بعد قراءة الميزات المخفية والزوايا المظلمة لـ C ++ / STL على comp.lang.c++.moderated للدهشة تمامًا لأن المقتطف التالي تم تجميعه وعمله في كل من Visual Studio 2008 و G ++ 4.4.

هنا الرمز:

#include <stdio.h>
int main()
{
    int x = 10;
    while (x --> 0) // x goes to 0
    {
        printf("%d ", x);
    }
}

أفترض أن هذا هو C ، لأنه يعمل في دول مجلس التعاون الخليجي كذلك. أين يتم تحديد هذا في المعيار ، ومن أين أتت؟




انها تعادل

while (x-- > 0)

x-- (decrement post) يكافئ x = x-1 ، لذلك يتحول الرمز إلى:

while(x > 0) {
    x = x-1;
    // logic
}



انها

#include <stdio.h>
int main(void){
     int x = 10;

     while( x-- > 0 ){ // x goes to 0

       printf("%d ", x);
     }

     return 0;
}

مجرد الفضاء يجعل الأشياء تبدو مضحكة ، -- decrements و > يقارن.




while( x-- > 0 )

كيف يتم تحليل ذلك.




كتاب واحد قرأته (لا أتذكر بشكل صحيح أي كتاب) ذكر: يحاول Compilers تحليل التعبيرات إلى الرمز المميز الأكبر باستخدام القاعدة اليمنى اليسرى.

في هذه الحالة ، التعبير:

x-->0

يوزع على أكبر الرموز:

token 1: x
token 2: --
token 3: >
token 4: 0
conclude: x-- > 0

تنطبق القاعدة نفسها على هذا التعبير:

a-----b

بعد التحليل:

token 1: a
token 2: --
token 3: --
token 4: -
token 5: b
conclude: (a--)-- - b

آمل أن يساعد هذا على فهم تعبير معقد ^^




على أي حال ، لدينا "يذهب إلى" المشغل الآن. "-->" من السهل تذكرها كإتجاه ، و "بينما x يذهب إلى الصفر" هو معنى مستقيم.

علاوة على ذلك ، هو أكثر فعالية قليلاً من "for (x = 10; x > 0; x --)" على بعض الأنظمة الأساسية.




سوف يطبع المترجم الخاص بي 9876543210 عندما أقوم بتشغيل هذا الكود.

#include <iostream>
int main()
{
    int x = 10;

    while( x --> 0 ) // x goes to 0
    {
        std::cout << x;
    }
}

كما هو متوقع. while( x > 0) تعني في الواقع while( x > 0) . x - x-- آخر x .

while( x > 0 ) 
{
    x--;
    std::cout << x;
}

هي طريقة مختلفة لكتابة نفس الشيء.

من الجميل أن تبدو الأصلي مثل "بينما x يذهب إلى 0" رغم ذلك.




-- هو مشغل decrement و > هو أكبر من المشغل.

يتم تطبيق المشغلين كجهاز واحد مثل --> .




في الواقع ، x يتم decrementing ومع يتم التحقق من هذا الشرط. إنه ليس --> ، إنه (x--) > 0

ملاحظة: يتم تغيير قيمة x بعد التحقق من الشرط ، لأنه بعد decrementing. يمكن أيضًا حدوث بعض الحالات المشابهة ، على سبيل المثال:

-->    x-->0
++>    x++>0
-->=   x-->=0
++>=   x++>=0



لماذا كل المضاعفات؟

الإجابة البسيطة على السؤال الأصلي هي:

#include <stdio.h>
int main()
{
    int x = 10;
    while (x > 0) 
    {
        printf("%d ", x);
        x = x-1;
    }
}

هل نفس الشيء. لا أقول يجب عليك أن تفعل ذلك من هذا القبيل ، لكنه يفعل نفس الشيء وكان يمكن أن يجيب على السؤال في وظيفة واحدة.

x-- هو اختصار فقط لما ذكر أعلاه ، و > مجرد عامل عادي أكبر من operator . لا يوجد لغز كبير!

هناك الكثير من الناس يجعل الأشياء البسيطة معقدة في الوقت الحاضر ؛)






Related