পোস্টফিক্স ইনক্রিমেন্ট অপারেটর এড়িয়ে চলুন


25

আমি পড়েছি যে পারফরম্যান্স কারণে (কিছু ক্ষেত্রে) পোস্টফিক্স ইনক্রিমেন্ট অপারেটরটি এড়ানো উচিত ।

কিন্তু এই কোড পাঠযোগ্যতা প্রভাবিত করে না? আমার মতে:

for(int i = 0; i < 42; i++);
    /* i will never equal 42! */

এর থেকে আরও ভাল দেখাচ্ছে:

for(int i = 0; i < 42; ++i);
    /* i will never equal 42! */

তবে এটি সম্ভবত অভ্যাসের বাইরে। স্বীকার করা, আমি অনেক ব্যবহার দেখিনি ++i

এই ক্ষেত্রে পাঠযোগ্যতার ত্যাগ করতে পারফরম্যান্স কি খারাপ? নাকি আমি শুধু অন্ধ, আর এর ++iচেয়ে বেশি পাঠযোগ্য i++?


1
আমি i++এটি জানার আগে ব্যবহার করেছি যে এটি পারফরম্যান্সের উপর প্রভাব ফেলতে পারে ++i, তাই আমি স্যুইচ করেছি। প্রথমদিকে প্রথমটিকে কিছুটা অদ্ভুত লাগছিল, তবে কিছুক্ষণ পরেই আমি অভ্যস্ত হয়ে গেলাম এবং এখন এটি প্রাকৃতিকভাবেই বোধ হয় i++
গ্যাবলিন

15
++iএবং i++নির্দিষ্ট প্রসঙ্গে বিভিন্ন জিনিস করুন, সেগুলি এক রকম বলে মনে করবেন না।
32

2
এটি কি সি বা সি ++ সম্পর্কে? তারা দুটি খুব বিভিন্ন ভাষায়! :-) সি ++ এ আইডিয়োমেটিক ফর লুপটি for (type i = 0; i != 42; ++i)। কেবলমাত্র operator++অতিরিক্ত লোড করা যায় না, operator!=এবং তাইও হতে পারে operator<। প্রিফিক্স ইনক্রিমেন্ট পোস্টফিক্সের চেয়ে বেশি ব্যয়বহুল নয়, সমান নয়-কম-চেয়ে বেশি ব্যয়বহুলও নয়। আমাদের কোনটি ব্যবহার করা উচিত?
বো পারসন

7
এটিকে কি ++ সি বলা উচিত নয়?
আরমান্দ

21
@ স্টেফেন: সি ++ এর অর্থ সি নেওয়া, এতে যুক্ত করুন এবং তারপরে পুরানোটি ব্যবহার করুন
সুপারক্যাট

উত্তর:


58

ঘটনা:

  1. আমি ++ এবং ++ আমিও পড়তে সমান সহজ। আপনি এটি পছন্দ করেন না কারণ আপনি এটি ব্যবহার করেন না, তবে মূলত এমন কিছু নেই যা আপনি এটির ভুল ব্যাখ্যা করতে পারেন, সুতরাং এটি পড়ার বা লেখার কোনও কাজ নেই।

  2. কমপক্ষে কিছু ক্ষেত্রে পোস্টফিক্স অপারেটর কম দক্ষ হবে।

  3. তবে, ৯৯.৯৯% ক্ষেত্রে এটি বিবেচ্য নয় কারণ (ক) এটি যে কোনও উপায়ে সাধারণ বা আদিম ধরণের কাজ করবে এবং এটি কেবলমাত্র কোনও সমস্যা যদি এটি একটি বড় অবজেক্টটি অনুলিপি করে থাকে (খ) এটি কোনও পারফরম্যান্সে থাকবে না কোডের গুরুতর অংশ (সি) আপনি জানেন না যে সংকলক এটি অনুকূল করে তুলবে কিনা, এটি করতে পারে।

  4. সুতরাং, আমি উপসর্গটি ব্যবহার করার পরামর্শ দিচ্ছি যদি না আপনি বিশেষত পোস্টফিক্সের প্রয়োজন হয় তবে এটি প্রবেশের জন্য একটি ভাল অভ্যাস মাত্র, কারণ (ক) অন্য জিনিসগুলির সাথে সুনির্দিষ্ট হওয়া ভাল অভ্যাস এবং (খ) একবার নীল চাঁদে আপনি পোস্টফিক্স ব্যবহার করার ইচ্ছা রাখবেন এবং এটি ভুল উপায়ে পান: আপনি যদি সর্বদা আপনার অর্থটি লিখেন তবে সম্ভবত এটির সম্ভাবনা কম। কর্মক্ষমতা এবং অপ্টিমাইজেশনের মধ্যে সর্বদা একটি বাণিজ্য বন্ধ রয়েছে।

আপনার সাধারণ জ্ঞান ব্যবহার করা উচিত এবং আপনার প্রয়োজন না হওয়া পর্যন্ত মাইক্রো-অপ্টিমাইজ করা উচিত নয়, তবে এটির জন্য স্বতঃস্ফূর্তভাবে অদক্ষ হয়ে উঠবেন না। সাধারণত এর অর্থ: প্রথমত, এমন কোনও কোড নির্মাণকে বাতিল করুন যা অ-সময়-সমালোচনামূলক কোডেও অগ্রহণযোগ্যভাবে অযোগ্য (সাধারণভাবে এমন কোনও কিছু যা মৌলিক ধারণাগত ত্রুটির প্রতিনিধিত্ব করে, অকারণে মূল্য দিয়ে 500MB অবজেক্টগুলি পাস করার মতো); এবং দ্বিতীয়ত, কোডটি লেখার অন্য প্রতিটি পদ্ধতিতে ক্লিয়ারেস্টটি বেছে নিন।

তবে, এখানে আমি উত্তরটি সহজ বলে বিশ্বাস করি: আমি বিশ্বাস করি পূর্ববর্তী লেখাটি যদি না আপনার নির্দিষ্টভাবে পোস্টফিক্সের প্রয়োজন হয় (ক) খুব প্রান্তিকভাবে পরিষ্কার হয় এবং (খ) খুব সামান্যভাবে আরও দক্ষ হওয়ার সম্ভাবনা থাকে, তাই আপনার সর্বদা এটি ডিফল্টরূপে লিখতে হবে তবে ভুলে গেলে তা নিয়ে চিন্তা করবেন না

ছয় মাস আগে, আমি আপনার মতো একই ধারণা করেছি, আমি ++ বেশি প্রাকৃতিক, তবে আপনি যা ব্যবহার করছেন তা খাঁটিভাবে।

সম্পাদনা 1: স্কট মায়ারস, "আরও কার্যকর সি ++" তে আমি যাকে সাধারণত এই জিনিসের উপর বিশ্বাস করি, তিনি বলেছেন যে আপনার সাধারণভাবে ব্যবহারকারী-সংজ্ঞায়িত প্রকারের পোস্টফিক্স অপারেটরটি ব্যবহার করা এড়ানো উচিত (কারণ পোস্টফিক্স ইনক্রিমেন্ট ফাংশনের একমাত্র বুদ্ধিমান বাস্তবায়ন হ'ল) অবজেক্টের অনুলিপি, ইনক্রিমেন্টটি সম্পাদনের জন্য উপসর্গ ইনক্রিমেন্ট ফাংশনটি কল করুন এবং অনুলিপিটি ফিরিয়ে দিন, তবে অনুলিপি অপারেশন ব্যয়বহুল হতে পারে)।

সুতরাং, আমরা জানি না যে (ক) আজকের ক্ষেত্রে এটি সত্য কিনা, (খ) এটি অন্তর্জাতীয় প্রকারের ক্ষেত্রে (কম) প্রযোজ্য কিনা তাও (গ) আপনার "++" ব্যবহার করা উচিত কিনা? লাইটওয়েট পুনরায় শ্রেনী শ্রেণীর চেয়ে বেশি কিছু। তবে আমি উপরে বর্ণিত সমস্ত কারণে, এটি কোনও ব্যাপার নয়, আমি আগে যা বলেছিলাম তা করুন do

সম্পাদনা 2: এটি সাধারণ অনুশীলনকে বোঝায়। আপনি যদি মনে করেন এটি নির্দিষ্ট কোনও ক্ষেত্রে গুরুত্বপূর্ণ matter তবে আপনার এটি প্রোফাইল দেওয়া উচিত। প্রোফাইলিং সহজ এবং সস্তা এবং কাজ করে। অনুকূলিতকরণের জন্য যা প্রয়োজন তা প্রথম নীতিগুলি থেকে বাদ দেওয়া শক্ত এবং ব্যয়বহুল এবং কার্যকর হয় না।


আপনার পোস্টিং ঠিক টাকার উপর। অভিব্যক্তিগুলিতে যেখানে ইনফিক্স + অপারেটর এবং পোস্ট-ইনক্রিমেন্ট ++ যেমন ওভারলোড হয়েছে যেমন aClassInst = someOtherClassInst + yetAnotherClassInst ++ হিসাবে, পার্সার পোস্ট-ইনক্রিমেন্ট অপারেশন সম্পাদনের জন্য কোড তৈরি করার আগে অ্যাডিটিভ অপারেশন সম্পাদনের জন্য কোড তৈরি করবে, প্রয়োজনীয়তা হ্রাস করে একটি অস্থায়ী অনুলিপি তৈরি করুন। এখানে পারফরম্যান্স হত্যাকারী পোস্ট-ইনক্রিমেন্ট নয়। এটি একটি ওভারলোডেড ইনফিক্স অপারেটরের ব্যবহার। ইনফিক্স অপারেটররা নতুন উদাহরণ তৈরি করে।
বিট-ট্যুইডলার

2
আমি অত্যন্ত সন্দেহ করি যে এই প্রশ্ন / উত্তরে উল্লেখ করা একটি জনপ্রিয় জনপ্রিয় প্রোগ্রামিং ভাষার নামের কারণে লোকেরা i++বরং 'ব্যবহার' ++iহচ্ছে
শ্যাডো

61

প্রোগ্রামার জন্য সর্বদা কোড এবং কম্পিউটার দ্বিতীয়।

যদি কোনও পারফরম্যান্সের পার্থক্য থাকে, কম্পাইলারটি আপনার কোডের উপরে বিশেষজ্ঞ নজর রাখার পরে এবং আপনি এটি পরিমাপ করতে পারেন এবং এটি গুরুত্বপূর্ণ - তবে আপনি এটি পরিবর্তন করতে পারেন।


7
সুপারের বক্তব্য !!!
ডেভ

8
@ মার্টিন: ঠিক এই কারণেই আমি উপসর্গের ইনক্রিমেন্ট ব্যবহার করব। পোস্টফিক্স শব্দার্থবিজ্ঞান বলতে বোঝায় পুরানো মানটি চারপাশে রাখা, এবং যদি এর কোনও প্রয়োজন না থাকে তবে এটি ব্যবহার করা ভুল।
ম্যাথিউ এম।

1
লুপ সূচকটির জন্য যা পরিষ্কার হবে - তবে আপনি যদি পয়েন্টার বাড়িয়ে কোনও উপরি দিয়ে পুনরাবৃত্তি করছিলেন এবং উপসর্গটি ব্যবহার করছিলেন মানে শুরুর আগে একটি অবৈধ ঠিকানায় শুরু হওয়া যা পারফরম্যান্স বৃদ্ধির ক্ষেত্রে নির্বিশেষে খারাপ হবে
মার্টিন বেকেট

5
@ ম্যাথু: এটি সহজ নয় যে পোস্ট-ইনক্রিমেন্ট বলতে বোঝায় যে পুরানো মানটির চারপাশে একটি অনুলিপি রাখা উচিত। একটি কম্পাইলার মধ্যবর্তী মানগুলি কীভাবে পরিচালনা করে তা নিশ্চিত হওয়া যায় না যতক্ষণ না কেউ তার আউটপুট দেখে views আপনি যদি আমার মন্তব্যযুক্ত জিসিসি থেকে উত্পন্ন সমাবেশ ভাষার তালিকাটি দেখতে সময় নেন, আপনি দেখতে পাবেন যে জিসি উভয় লুপের জন্য একই মেশিন কোড উত্পন্ন করে। পোস্ট-ইনক্রিমেন্টের চেয়ে প্রাক-বর্ধনের পক্ষপাতী হওয়ার বিষয়ে এই বাজে কথা কারণ এটি অনুমানের চেয়ে সামান্য বেশি।
বিট-টুইডলার

2
@ ম্যাথিউ: আমি পোস্ট করা কোডটি অপ্টিমাইজেশন বন্ধ করে তৈরি হয়েছিল। সি ++ স্পেসিফিকেশনটি উল্লেখ করে না যে যখন যখন ইন-ইনক্রিমেন্টেশন ব্যবহার করা হয় তখন একটি সংকলক অবশ্যই একটি মানটির অস্থায়ী উদাহরণ তৈরি করে। এটি কেবল পূর্ব এবং উত্তরোত্তর অপারেটরগুলির প্রাধান্যকে বর্ণনা করে।
বিট-টুইডलर

13

জিসিসি উভয় লুপের জন্য একই মেশিন কোড তৈরি করে।

সি কোড

int main(int argc, char** argv)
{
    for (int i = 0; i < 42; i++)
            printf("i = %d\n",i);

    for (int i = 0; i < 42; ++i)
        printf("i = %d\n",i);

    return 0;
}

সমাবেশ কোড (আমার মন্তব্য সহ)

    cstring
LC0:
    .ascii "i = %d\12\0"
    .text
.globl _main
_main:
    pushl   %ebp
    movl    %esp, %ebp
    pushl   %ebx
    subl    $36, %esp
    call    L9
"L00000000001$pb":
L9:
    popl    %ebx
    movl    $0, -16(%ebp)  // -16(%ebp) is "i" for the first loop 
    jmp L2
L3:
    movl    -16(%ebp), %eax   // move i for the first loop to the eax register 
    movl    %eax, 4(%esp)     // push i onto the stack
    leal    LC0-"L00000000001$pb"(%ebx), %eax // load the effective address of the format string into the eax register
    movl    %eax, (%esp)      // push the address of the format string onto the stack
    call    L_printf$stub    // call printf
    leal    -16(%ebp), %eax  // make the eax register point to i
    incl    (%eax)           // increment i
L2:
    cmpl    $41, -16(%ebp)  // compare i to the number 41
    jle L3              // jump to L3 if less than or equal to 41
    movl    $0, -12(%ebp)   // -12(%ebp) is "i" for the second loop  
    jmp L5
L6:
    movl    -12(%ebp), %eax   // move i for the second loop to the eax register 
    movl    %eax, 4(%esp)     // push i onto the stack
    leal    LC0-"L00000000001$pb"(%ebx), %eax // load the effective address of the format string into the eax register
    movl    %eax, (%esp)      // push the address of the format string onto the stack
    call    L_printf$stub     // call printf
    leal    -12(%ebp), %eax  // make eax point to i
    incl    (%eax)           // increment i
L5:
    cmpl    $41, -12(%ebp)   // compare i to 41 
    jle L6               // jump to L6 if less than or equal to 41
    movl    $0, %eax
    addl    $36, %esp
    popl    %ebx
    leave
    ret
    .section __IMPORT,__jump_table,symbol_stubs,self_modifying_code+pure_instructions,5
L_printf$stub:
    .indirect_symbol _printf
    hlt ; hlt ; hlt ; hlt ; hlt
    .subsections_via_symbols

অপ্টিমাইজেশন চালু কীভাবে?
সার্ভ-ইন

2
@ ব্যবহারকারী: সম্ভবত কোনও পরিবর্তন হয়নি, তবে আপনি কি আসলেই আশা করছেন যে বিট-টুইডলার শীঘ্রই যে কোনও সময় ফিরে আসবে?
ডিডুকিপেটর

2
যত্ন নিন: সিতে ওভারলোডেড অপারেটরগুলির সাথে কোনও ব্যবহারকারী-সংজ্ঞায়িত প্রকার নেই, তবে সি ++ এ রয়েছে এবং প্রাথমিক ধরণের থেকে ব্যবহারকারী-সংজ্ঞায়িত প্রকারগুলিতে সাধারণীকরণ কেবল অবৈধ
প্রতিলিপি

@ উত্সাহক: এই উত্তরটি ব্যবহারকারী-সংজ্ঞায়িত প্রকারগুলিতে সাধারণীকরণ করে না বলে উল্লেখ করার জন্য আপনাকেও ধন্যবাদ। জিজ্ঞাসার আগে আমি তার ব্যবহারকারীর পৃষ্ঠার দিকে নজর দিইনি।
সার্ভ-ইনক

12

কর্মক্ষমতা সম্পর্কে চিন্তা করবেন না, সময় বলুন 97%। অকালীন অপটিমাইজেশন হ'ল সমস্ত অশুভের মূল।

- ডোনাল্ড নুথ

এখন এটি আমাদের পথের বাইরে চলে গেছে, আসুন আমরা আমাদের পছন্দটি বুদ্ধিমান করে করি :

  • ++i: উপসর্গ বৃদ্ধি , বর্তমান মান বৃদ্ধি এবং ফলাফল দেয়
  • i++: পোস্টফিক্স ইনক্রিমেন্ট , মানটি অনুলিপি করুন, বর্তমান মান বৃদ্ধি করুন, অনুলিপি প্রদান করে

পুরানো মানটির একটি অনুলিপি না লাগলে পোস্টফিক্স ইনক্রিমেন্ট ব্যবহার করা জিনিসগুলি সম্পন্ন করার চারপাশের উপায়।

অসচ্ছলতা অলসতা থেকে আসে, সর্বদা সরাসরি আপনার উদ্দেশ্যকে প্রকাশ করে এমন কনস্ট্রাক্টটি ব্যবহার করুন, ভবিষ্যতের রক্ষণাবেক্ষণকারী আপনার আসল উদ্দেশ্যকে ভুল বোঝার চেয়ে কম সুযোগ রয়েছে।

যদিও এটি এখানে (সত্যই) নাবালক, এমন অনেক সময় আছে যখন আমি কোড পড়ার দ্বারা সত্যই হতবাক হয়ে পড়েছিলাম: আমি সত্যিই ভাবছিলাম যে অভিপ্রায় এবং আসল এক্সপ্রেস একসাথে আছে কিনা, এবং অবশ্যই কয়েক মাস পরে তারা (বা আমি) মনে পড়ে নি ...

সুতরাং, এটি আপনার কাছে সঠিক দেখাচ্ছে কিনা তা বিচার্য নয়। আলিঙ্গন করুন KISS । কয়েক মাসের মধ্যে আপনি আপনার পুরানো অনুশীলনগুলি এড়িয়ে যাবেন।


4

C ++, আপনি পারে সুত্রে কর্মক্ষমতা পার্থক্য যদি অপারেটর জড়িত overloads কিনা তা নিশ্চিত করুন, বিশেষ করে যদি তুমি লেখা টেমপ্লেট করা কোড এবং কি না জানি না iterators পাস করা হতে পারে। কোন পুনরুক্তিকারীর এক্স যৌক্তিকতা উভয় সারগর্ভ এবং significant- হতে পারে এটি হ'ল ধীর এবং সংকলক দ্বারা অপ্রতিরোধ্য।

তবে এটি সি এর ক্ষেত্রে নয়, যেখানে আপনি জানেন যে এটি কেবল একটি তুচ্ছ ধরনের হবে, এবং পারফরম্যান্সের পার্থক্যটি তুচ্ছ এবং সংকলক সহজেই অপ্টিমাইজ করতে পারে।

সুতরাং একটি পরামর্শ: আপনি সি, বা সি ++ তে প্রোগ্রাম এবং প্রশ্নগুলি একটি বা অন্যটির সাথে সম্পর্কিত, উভয়ই নয়।


2

উভয় অপারেশন এর পারফরম্যান্স অন্তর্নিহিত আর্কিটেকচার উপর অত্যন্ত নির্ভরশীল। স্মৃতিতে সঞ্চিত একটি মান বাড়িয়ে তুলতে হবে, যার অর্থ ভন নিউম্যান ব্যটনেইক উভয় ক্ষেত্রেই সীমাবদ্ধ ফ্যাক্টর।

++ i এর ক্ষেত্রে আমাদের করতে হবে

Fetch i from memory 
Increment i
Store i back to memory
Use i

আই ++ এর ক্ষেত্রে আমাদের করতে হবে

Fetch i from memory
Use i
Increment i
Store i back to memory

++ এবং - অপারেটরগুলি পিডিপি -11 নির্দেশিকা সেটটিতে তাদের উত্সটি সনাক্ত করে। PDP-11 একটি রেজিস্টারে স্বয়ংক্রিয় পোস্ট-ইনক্রিমেন্ট সম্পাদন করতে পারে। এটি কোনও রেজিস্টারে থাকা কার্যকর ঠিকানায় স্বয়ংক্রিয় প্রাক-হ্রাসও সম্পাদন করতে পারে। উভয় ক্ষেত্রেই, সংকলক কেবল এই মেশিন-স্তরের ক্রিয়াকলাপগুলির সুবিধা নিতে পারত যদি প্রশ্নে ভেরিয়েবলটি "নিবন্ধক" ভেরিয়েবল হয়।


2

যদি কিছু জানতে ধীর হয় কিনা তা জানতে চান, এটি পরীক্ষা করে দেখুন। একটি বিগইন্টিজার বা সমমানের নিন, উভয় প্রতিমা ব্যবহার করে লুপের জন্য এটি একইভাবে আটকে দিন, নিশ্চিত করুন যে লুপটির অভ্যন্তরটি অপ্টিমাইজড না হয়ে যায় এবং উভয়কেই সময় দেয়।

নিবন্ধটি পড়ে, আমি এটি তিনটি কারণে খুব দৃinc়প্রত্যয়ী বলে মনে করি না। এক, সংকলক কখনও কখনও ব্যবহৃত হয় না যে একটি বস্তুর তৈরি কাছাকাছি অনুকূল করতে সক্ষম হওয়া উচিত। দ্বিতীয়ত, i++ধারণাটি লুপগুলির জন্য সংখ্যাসূচক জন্য মূর্তিমানিক , তাই আমি যে ঘটনাগুলি দেখতে পাচ্ছি তা আসলে সীমাবদ্ধ। তিন, তারা বিশুদ্ধ তাত্ত্বিক যুক্তি সরবরাহ করে, এটির ব্যাক আপ করার কোনও সংখ্যা নেই।

বিশেষত # 1 কারণের ভিত্তিতে, আমার অনুমান যে আপনি যখন প্রকৃতপক্ষে সময় নির্ধারণ করেন, তখন তারা একে অপরের পাশে থাকবেন।


-1

সবার আগে এটি পঠনযোগ্যতা আইএমওকে প্রভাবিত করে না। আপনার দেখার অভ্যাসটি এটি নয় তবে আপনি এটি অভ্যস্ত হওয়ার আগে অল্প সময়ের মধ্যেই আসবে।

দ্বিতীয়ত আপনি যদি নিজের কোডটিতে এক টন পোস্টফিক্স অপারেটর ব্যবহার না করেন তবে আপনার সম্ভবত খুব বেশি পার্থক্য দেখা যাবে না। যখন সম্ভব হয় তখন সেগুলি ব্যবহার না করার মূল যুক্তিটি হ'ল মূল ভার এর মানটির একটি অনুলিপি যেখানে আদি যুক্ত এখনও ব্যবহার করা যেতে পারে তর্কগুলি শেষ না হওয়া পর্যন্ত রাখতে হবে। এটি হয় 32 বিট বা 64 বিটগুলি স্থাপত্যের উপর নির্ভর করে। এটি 4 বা 8 বাইট বা 0.00390625 বা 0.0078125 এমবি সমান। সম্ভাবনাগুলি খুব বেশি যে আপনি যদি তাদের একটি টন ব্যবহার না করেন যা আপনাকে খুব দীর্ঘ সময়ের জন্য সংরক্ষণ করতে হবে যা আজকের কম্পিউটার সংস্থান এবং গতির সাথে আপনি পোস্টফিক্স থেকে উপসর্গে পরিবর্তন করতে কোনও পার্থক্যও দেখতে পাবেন না।

সম্পাদনা করুন: আমার উপসংহারটি মিথ্যা প্রমাণিত হওয়ায় এই অবশিষ্ট অংশটি ভুলে যান (++ i এবং i ++ এর অংশটি বাদে সবসময় একই জিনিস করা হয় না ... এটি এখনও সত্য)।

এছাড়াও এটি আগে চিহ্নিত করা হয়েছিল যে তারা কোনও ক্ষেত্রে একই কাজ করে না। আপনি যদি সিদ্ধান্ত নেন তবে স্যুইচটি তৈরি করতে সাবধান হন। আমি কখনই এটি চেষ্টা করে দেখিনি (আমি সর্বদা পোস্টফিক্স ব্যবহার করেছি) তাই আমি নিশ্চিতভাবে জানি না তবে আমি মনে করি পোস্টফিক্স থেকে উপসর্গে পরিবর্তন করার ফলে বিভিন্ন ফলাফল হবে: (আবার আমি ভুল হতে পারি ... সংকলকের উপর নির্ভর করে / দোভাষীও)

for (int i=0; i < 10; i++) //the set of i values here will be {0,1,2,3,4,5,6,7,8,9}
for (int i=0; i < 10; ++i) //the set of i values here will be {1,2,3,4,5,6,7,8,9,10}

4
ইনক্রিমেন্ট অপারেশন লুপের শেষে ঘটে, তাই তাদের ঠিক একই আউটপুট হবে। এটি সংকলক / দোভাষীর উপর নির্ভর করে না।
jsternberg

@ জাস্টারবার্গ ... ধন্যবাদ আমি কখনই বর্ধিত হওয়ার বিষয়টি নিশ্চিত ছিলাম না কারণ আমার কখনই এটি পরীক্ষা করার মতো কারণ ছিল না। আমি যখন কলেজটিতে সংকলকগুলি করেছি তখন এটি অনেক দীর্ঘ হয়েছে! lol
কেনেথ

ভুল ভুল।
রুহোলা

-1

আমি শব্দার্থগতভাবে মনে করি, এর ++iচেয়ে বেশি বোধগম্য করে তোলে i++, তাই এটি না করা সাধারণ হিসাবে বাদে আমি প্রথমটির সাথে লেগে থাকব (যেমন জাভাতে, আপনার ব্যবহার করা উচিত i++কারণ এটি ব্যাপকভাবে ব্যবহৃত হয়)।


-2

এটি শুধুমাত্র পারফরম্যান্স সম্পর্কে নয়।

কখনও কখনও আপনি অনুলিপি কার্যকরভাবে এড়াতে চান, কারণ এটির কোনও অর্থ নেই। এবং যেহেতু উপসর্গের ইনক্রিমেন্টের ব্যবহার এর উপর নির্ভর করে না এটি উপসর্গ ফর্মের সাথে লেগে থাকা সহজ।

এবং আদিম ধরণের এবং জটিল ধরণের জন্য বিভিন্ন ইনক্রিমেন্ট ব্যবহার করা ... এটি সত্যিই অপঠনযোগ্য।


-2

যদি আপনার সত্যিই এটির প্রয়োজন না হয় তবে আমি ++ i এ থাকি। বেশিরভাগ ক্ষেত্রেই, এটিই যার ইচ্ছা। এটি প্রায়শই আপনার i ++ এর প্রয়োজন হয় না এবং এই জাতীয় নির্মাণ পড়ার সময় আপনাকে সর্বদা দুবার ভাবতে হবে। ++ i সহ এটি সহজ: আপনি 1 যুক্ত করেন, এটি ব্যবহার করুন এবং তারপরে আমি এখনও একই।

সুতরাং, আমি @ মার্টিন বেকেটের সাথে পূর্ণ আন্তরিকভাবে সম্মত: এটি আপনার পক্ষে সহজ করুন, এটি ইতিমধ্যে যথেষ্ট শক্ত।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.