[c++] সি ++ এ "->" অপারেটর কী?


9 Answers

অথবা সম্পূর্ণ ভিন্ন কিছু জন্য ... x স্লাইড 0

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

তাই গাণিতিক নয়, কিন্তু ... প্রতিটি ছবি হাজার হাজার শব্দ আঁকা হয় ...

Question

comp.lang.c++.moderated C ++ / STL এর লুকানো বৈশিষ্ট্য এবং ডার্ক কর্নার পড়ার পরে, আমি সম্পূর্ণরূপে বিস্মিত হয়েছিলাম যে নীচের স্নিপেটটি ভিজ্যুয়াল স্টুডিও 2008 এবং G ++ 4.4 উভয়তে কম্পাইল এবং কাজ করেছে।

এখানে কোডটি রয়েছে:

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

আমি এই সি মনে করি, এটি GCC পাশাপাশি কাজ করে। কোথায় এই মান নির্ধারিত হয়, এবং এটা কোথা থেকে এসেছে?




এটা সমতুল্য

while (x-- > 0)

x-- (পোস্ট হ্রাস) x = x-1 সমতুল্য তাই কোডটি রূপান্তরিত হয়:

int x = 10;

while( 0 <---- x )
{
   printf("%d ", x);
}



যাইহোক, আমরা এখন একটি অপারেটর "যায়"। "-->" একটি দিক হিসাবে মনে রাখা সহজ, এবং "যখন x শূন্যে যায়" অর্থ সরাসরি।

উপরন্তু, এটি কিছু প্ল্যাটফর্মগুলির "for (x = 10; x > 0; x --)" চাইতেও আরও বেশি কার্যকরী।




এটা

while( x-- > 0 )

শুধু স্থান মজা জিনিস দেখায়, -- হ্রাস এবং > তুলনা।




কেন সব জটিলতা?

আসল প্রশ্নের সহজ উত্তর ঠিক হল:

int abc(){
    int a = 5
    while((a--) > 0){ // Decrement and comparison both at once
        // Code
    }
}

একই জিনিস। বলার অপেক্ষা রাখে না যে আপনি এটি ভালো করা উচিত, কিন্তু এটি একই জিনিস এবং একটি পোস্টে প্রশ্নের উত্তর দিতে হবে।

x-- উপরের জন্য শুধু x-- , এবং > শুধুমাত্র operator চেয়ে একটি স্বাভাবিক বৃহত্তর। কোন বড় রহস্য!

আজকাল জটিল জিনিসগুলি জটিল করে তুলছে অনেক মানুষ;)




আমি পড়া একটি বই (আমি সঠিকভাবে কোন বই মনে রাখবেন না) বলেন: কম্পাইলার বাম ডান নিয়ম ব্যবহার করে বৃহত্তম টোকেন এক্সপ্রেশন প্যারিস করার চেষ্টা

এই ক্ষেত্রে, অভিব্যক্তি:

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

পার্স পরে:

while (x--)
{
   printf("%d ", x);
}

আমি এই জটিল অভিব্যক্তি ^^ বুঝতে সাহায্য করে আশা করি




#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;
}

এটা কিভাবে পার্স করা হয়।




প্রকৃতপক্ষে, x পোস্ট-হ্রাসিং এবং সেই অবস্থার সাথে চেক করা হচ্ছে। এটা না --> , এটি (x--) > 0

দ্রষ্টব্য: শর্তটি চেক করার পরে x মান পরিবর্তিত হয়, কারণ এটি হ্রাস হওয়ার পরে। কিছু অনুরূপ ক্ষেত্রেও ঘটতে পারে, উদাহরণস্বরূপ:

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



আমি এই কোড রান যখন আমার কম্পাইলার 9876543210 প্রিন্ট আউট হবে।

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

প্রত্যাশিত. while( x > 0) আসলে অর্থ while( x > 0)x পোস্ট হ্রাস x

#include<stdio.h>

int main()
{
    int x = 10;

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

    return 0;
}

একই জিনিস লেখার একটি ভিন্ন উপায়।

এটি আসলেই সুন্দর যে "যখন x 0 তে যায় তবে" সুন্দর।




-- হ্রাস অপারেটর এবং > অপারেটরের চেয়ে বড়

দুই অপারেটর যেমন একটি এক হিসাবে প্রয়োগ করা হয় -->






Related