c++ উনল সি++ এ "->" অপারেটর কী?




সি++ বই (17)

মনোযোগ দিন

--> একটি অপারেটর না। এটা আসলে দুটি পৃথক অপারেটর, -- এবং >

শর্তাধীন কোডের কোড হ্রাস x , যখন x এর মূল (হ্রাস করা) মানটি ফেরত দিচ্ছে না এবং তারপরে মূল অপারেটরটি > অপারেটর ব্যবহার করে 0 দিয়ে তুলনা করে।

ভাল বোঝার জন্য, বিবৃতিটি নিম্নরূপ লেখা যেতে পারে:

while((x--) > 0)

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 পাশাপাশি কাজ করে। কোথায় এই মান নির্ধারিত হয়, এবং এটা কোথা থেকে এসেছে?


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

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


এটা

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

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

       printf("%d ", x);
     }

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

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

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

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


এর ব্যবহার --> ঐতিহাসিক প্রাসঙ্গিকতা আছে। হ্রাসকরণ (এবং এখনও কিছু ক্ষেত্রে), x86 আর্কিটেকচারে বৃদ্ধি চেয়ে দ্রুত। ব্যবহার করে --> প্রস্তাব করে যে x 0 যাচ্ছে, এবং গাণিতিক ব্যাকগ্রাউন্ডগুলির সাথে আপিলগুলি।


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

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

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

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


এটা সমতুল্য

while (x-- > 0)

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

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

x বিপরীত দিক থেকে আরও দ্রুত শূন্য যেতে পারে:

int x = 10;

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

8 6 4 2

আপনি একটি তীর দিয়ে গতি নিয়ন্ত্রণ করতে পারেন!

int x = 100;

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

90 80 70 60 50 40 30 20 10

;)


আমি এই কোড রান যখন আমার কম্পাইলার 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

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

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

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


-- এবং > মধ্যে একটি স্থান অনুপস্থিত। x পোস্ট হ্রাস করা হয়, অর্থাৎ, x>0 ? অবস্থা চেক করার পরে হ্রাস করা হয়েছে x>0 ?


এটি দুটি অপারেটরের সমন্বয়। প্রথম -- মান হ্রাস করার জন্য, এবং > ডানদিকের অপারেডের চেয়ে মানটি বেশি কিনা তা যাচাই করার জন্য।

#include<stdio.h>

int main()
{
    int x = 10;

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

    return 0;
}

আউটপুট হবে:

9 8 7 6 5 4 3 2 1 0            

এটি একটি খুব জটিল অপারেটর, তাই ISO / IEC JTC1 (যৌথ কারিগরি কমিটি 1) সি ++ স্ট্যান্ডার্ডের দুটি পৃথক অংশে তার বর্ণনাটি পেশ করেছে।

একত্রে মজা করা, তারা দুটি ভিন্ন অপারেটর: -- এবং > যথাক্রমে §5.2.6 / 2 এবং সি ++ 03 স্ট্যান্ডার্ডের §5.9 তে বর্ণিত।


এটি ঠিক একই

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

অ-নেতিবাচক সংখ্যা জন্য


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

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

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

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

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


C এবং C++ "সর্বোচ্চ মঞ্চ" নিয়ম মেনে চলুন। একইভাবে একটি --- b অনুবাদ করা হয় (a--) - b , আপনার ক্ষেত্রে x-->0 অনুবাদ করে (x--)>0

মূলত নিয়মটি কী বলে যে বাম থেকে ডান দিকে যাচ্ছে, এক্সপ্রেশনগুলি সর্বাধিক অক্ষর গ্রহণ করে গঠিত হয় যা একটি বৈধ অভিব্যক্তি তৈরি করবে।





standards-compliance