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



Answers

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

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

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

Question

بعد قراءة الميزات المخفية والزوايا المظلمة لـ 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 ، لأنه يعمل في دول مجلس التعاون الخليجي كذلك. أين يتم تحديد هذا في المعيار ، ومن أين أتت؟




انها

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

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

       printf("%d ", x);
     }

     return 0;
}

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




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

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




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

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

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



while( x-- > 0 )

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




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

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




انها تعادل

while (x-- > 0)



مهووس تمامًا ، لكنني سأستخدم هذا:

#define as ;while

int main(int argc, char* argv[])
{
    int n = atoi(argv[1]);
    do printf("n is %d\n", n) as ( n --> 0);
    return 0;
}



سوف يطبع المترجم الخاص بي 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" رغم ذلك.




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

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

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

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

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

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




Links