আসুন নীচের কোডটি বিবেচনা করুন:
int main() {
int i = 2;
int b = ++i++;
return 3;
}
এটি একটি ত্রুটির সাথে নিম্নলিখিতটি সংকলন করে:
<source>: In function 'int main()':
<source>:3:16: error: lvalue required as increment operand
3 | int b = ++i++;
| ^~
এটা আমার কাছে ফর্সা লাগছে। প্রিফিক্স ইনক্রিমেন্টের তুলনায় পোস্টফিক্স ইনক্রিমেন্টের উচ্চ অগ্রাধিকার রয়েছে, সুতরাং কোডটি পার্স করা হয়েছে int b = ++(i++);
এবং i
এটি একটি মূল্যমান। সুতরাং ত্রুটি।
আসুন এখন ডিফল্ট অগ্রাধিকারগুলিকে ওভাররাইড করার জন্য বন্ধুত্বের সাথে এই রূপটি বিবেচনা করুন:
int main() {
int i = 2;
int b = (++i)++;
return 3;
}
এই কোডটি সংকলন করে এবং ফেরত দেয় 3.. এটি নিজে থেকে, এটি আমার কাছে ভাল লাগে তবে এটি প্রথম কোডের সাথে বৈপরীত্য বলে মনে হয়।
প্রশ্ন: কেন (++i)
একটি হল lvalue
যখন i
নয়?
ধন্যবাদ!
আপডেট: উপরে প্রদর্শিত ত্রুটি বার্তাটি জিসিসি থেকে হয়েছিল (x86-64 9.2)। এখানে নিখুঁত রেন্ডারিং: জিসিসি সহ ত্রুটি
ঝনঝন x86-64 9.0.0 এর বেশ আলাদা বার্তা রয়েছে: ঝাঁকুনিতে ত্রুটি
<source>:3:13: error: expression is not assignable
int b = ++i++;
^ ~~~
জিসিসির সাথে, আপনি এই ধারণাটি পান যে সমস্যাটি পোস্টফিক্স অপারেটরের সাথে রয়েছে এবং তারপরে আপনি ঘুরে বেড়াতে পারেন কেন ++i
ঠিক নেই কেন i
, তবে আমার প্রশ্ন। কলঙ্কের সাথে এটি স্পষ্ট হয় যে সমস্যাটি প্রিফিক্স অপারেটরের সাথে।