এটি সি এবং সি ++ এর লভ্য এবং মূল্যগুলি নিয়ে উদ্বেগ প্রকাশ করে।
সি প্রোগ্রামিং ল্যাঙ্গুয়েজে প্রাক-ইনক্রিমেন্ট এবং পোস্ট-ইনক্রিমেন্ট অপারেটর উভয়ই লভ্যালু নয়, মূল্য দেয়। এর অর্থ তারা =
অ্যাসাইনমেন্ট অপারেটরের বাম দিকে থাকতে পারে না । এই দুটি বিবৃতি সিতে একটি সংকলক ত্রুটি দেবে:
int a = 5;
a++ = 2; /* error: lvalue required as left operand of assignment */
++a = 2; /* error: lvalue required as left operand of assignment */
তবে সি ++ এ, প্রি-ইনক্রিমেন্ট অপারেটর একটি মূল্য দেয় , যখন পোস্ট-ইনক্রিমেন্ট অপারেটর একটি মূল্য দেয়। এর অর্থ হ'ল প্রাক-ইনক্রিমেন্ট অপারেটরের সাথে একটি এক্সপ্রেশন =
অ্যাসাইনমেন্ট অপারেটরের বাম পাশে স্থাপন করা যেতে পারে !
int a = 5;
a++ = 2; // error: lvalue required as left operand of assignment
++a = 2; // No error: a gets assigned to 2!
এখন কেন এমন হয়? পোস্ট-ইনক্রিমেন্টের পরে ভেরিয়েবল ইনক্রিমেন্ট হয় এবং এটি ইনক্রিমেন্ট হওয়ার আগে যেমন ছিল তেমন চলকটি দেয় returns এটি আসলে কেবল একটি মূল্যায়ন। ভেরিয়েবল এ এর পূর্বের মানটি একটি অস্থায়ী হিসাবে একটি রেজিস্টারে অনুলিপি করা হয় এবং তারপরে একটি বৃদ্ধি করা হয়। তবে ক এর পূর্বের মানটি প্রকাশের মাধ্যমে ফিরে আসে, এটি একটি মূল্য। এটি ভেরিয়েবলের বর্তমান সামগ্রীর প্রতিনিধিত্ব করে না।
প্রাক-ইনক্রিমেন্টটি প্রথমে ভেরিয়েবলকে বাড়িয়ে তোলে এবং তারপরে বর্ধিত হওয়ার পরে এটি পরিবর্তনশীল হিসাবে ফিরে আসে । এই ক্ষেত্রে, আমাদের অস্থায়ী রেজিস্টারে ভেরিয়েবলের পুরানো মান সংরক্ষণ করার দরকার নেই। ভেরিয়েবলের বর্ধিত হওয়ার পরে আমরা নতুন মানটি পুনরুদ্ধার করি। সুতরাং প্রাক-ইনক্রিমেন্টটি একটি মূল্যকে ফেরত দেয়, এটি ভেরিয়েবলটি নিজেই দেয়। আমরা এই ল্যাভেলুকে অন্য কোনও কিছুর জন্য নির্ধারণ করতে পারি, এটি নীচের বিবৃতিটির মতো। এটি লভালুকে মূল্যকে রূপান্তরিত করে।
int x = a;
int x = ++a;
যেহেতু প্রাক-ইনক্রিমেন্টটি একটি মূল্যকে ফেরত দেয়, আমরা এটিতেও কিছু বরাদ্দ করতে পারি। নিম্নলিখিত দুটি বিবৃতি অভিন্ন। দ্বিতীয় অ্যাসাইনমেন্টে, প্রথমে একটি বৃদ্ধি করা হয়, তারপরে এর নতুন মান 2 দিয়ে ওভাররাইট করা হয়।
int a;
a = 2;
++a = 2; // Valid in C++.