আপনি নির্ধারিত আচরণের চিৎকার শুরু করার আগে এটি N4659 (সি ++ 17) এ সুস্পষ্টভাবে তালিকাভুক্ত করা হয়েছে
i = i++ + 1; // the value of i is incremented
তবুও N3337 এ (সি ++ 11)
i = i++ + 1; // the behavior is undefined
কী বদলে গেল?
আমি যা সংগ্রহ করতে পারি সেগুলি থেকে, [N4659 basic.exec]
উল্লিখিত ব্যতীত, পৃথক অপারেটরগুলির ক্রিয়াকলাপগুলির মূল্যায়ন এবং স্বতন্ত্র এক্সপ্রেশনগুলির subexpresstions অসমর্থিত। [...] অপারেটরের অপারেন্ডসের মান গণনা অপারেটরের ফলাফলের মান গণনার আগে ক্রমযুক্ত হয়। একই মেমোরি অবস্থানের অন্য কোনও পার্শ্ব প্রতিক্রিয়া বা একই মেমরির অবস্থানের কোনও বস্তুর মান ব্যবহার করে একটি মূল্য গণনার তুলনায় যদি কোনও মেমরির অবস্থানের পার্শ্ব প্রতিক্রিয়াটি অসম্পূর্ণ হয় এবং সেগুলি সম্ভাব্য একযোগে না হয়, তবে আচরণটি সংজ্ঞায়িত।
যেখানে মানটি [N4659 বেসিক.টাইপ] এ সংজ্ঞায়িত করা হয়েছে
তুচ্ছভাবে অনুলিপিযোগ্য প্রকারের জন্য, মান উপস্থাপনা হ'ল অবজেক্টের উপস্থাপনায় বিটের একটি সেট যা একটি মান নির্ধারণ করে , যা প্রয়োগের সংজ্ঞায়িত মানগুলির একটি পৃথক উপাদান
থেকে [N3337 basic.exec]
উল্লিখিত ব্যতীত, পৃথক অপারেটরগুলির ক্রিয়াকলাপগুলির মূল্যায়ন এবং স্বতন্ত্র এক্সপ্রেশনগুলির সুব্যাক্রেশনগুলি অসমর্থিত। [...] অপারেটরের অপারেন্ডসের মান গণনা অপারেটরের ফলাফলের মান গণনার আগে ক্রমযুক্ত হয়। যদি কোনও স্কেলার অবজেক্টের পার্শ্ব প্রতিক্রিয়া একই স্কেলার অবজেক্টের অন্য কোনও পার্শ্ব প্রতিক্রিয়া বা একই স্কেলার অবজেক্টের মান ব্যবহার করে একটি মান গণনার তুলনায় অসম্পূর্ণ হয়, তবে আচরণটি অপরিজ্ঞাত।
তেমনিভাবে, মানটিকে [N3337 বেসিক.টাইপ] এ সংজ্ঞায়িত করা হয়
তুচ্ছভাবে অনুলিপিযোগ্য প্রকারের জন্য, মান উপস্থাপনা হ'ল অবজেক্টের উপস্থাপনায় বিটের একটি সেট যা একটি মান নির্ধারণ করে , যা একটি প্রয়োগ-সংজ্ঞায়িত মানগুলির একটি পৃথক উপাদান।
এগুলি সমানত্বের উল্লেখ ব্যতীত অভিন্ন, যা বিবেচ্য নয় এবং স্কেলার অবজেক্টের পরিবর্তে মেমরির অবস্থান ব্যবহারের সাথে , যেখানে
পাটিগণিত প্রকার, গণনার প্রকার, পয়েন্টার প্রকার, সদস্য প্রকারের নির্দেশক
std::nullptr_t
, এবং এই ধরণের সিভি-যোগ্য সংস্করণগুলিকে সম্মিলিতভাবে স্কেলার প্রকার বলা হয়।
যা উদাহরণকে প্রভাবিত করে না।
থেকে [N4659 expr.ass]
অ্যাসাইনমেন্ট অপারেটর (=) এবং যৌগিক নিয়োগ অপারেটরগুলি সমস্ত গ্রুপকে ডান থেকে বামে। সবার জন্য তাদের বাম অপারেন্ড হিসাবে একটি পরিবর্তনযোগ্য লভ্যালু প্রয়োজন এবং বাম অপারেন্ডকে উল্লেখ করে একটি লভালিউটি ফিরিয়ে দিন। বাম অপারেন্ডটি যদি কিছুটা বিট-ফিল্ড হয় তবে সমস্ত ক্ষেত্রে ফলাফলটি একটি বিট-ফিল্ড is সমস্ত ক্ষেত্রে, অ্যাসাইনমেন্টটি ডান এবং বাম অপারেন্ডগুলির মান গণনা এবং অ্যাসাইনমেন্ট এক্সপ্রেশনটির মান গণনার আগে ক্রমযুক্ত হয়। বাম অপারেন্ডের আগে ডান অপরেন্ডটি সিকোয়েন্সড হয়।
থেকে [N3337 expr.ass]
অ্যাসাইনমেন্ট অপারেটর (=) এবং যৌগিক নিয়োগ অপারেটরগুলি সমস্ত গ্রুপকে ডান থেকে বামে। সবার জন্য তাদের বাম অপারেন্ড হিসাবে একটি পরিবর্তনযোগ্য লভ্যালু প্রয়োজন এবং বাম অপারেন্ডকে উল্লেখ করে একটি লভালিউটি ফিরিয়ে দিন। বাম অপারেন্ডটি যদি কিছুটা বিট-ফিল্ড হয় তবে সমস্ত ক্ষেত্রে ফলাফলটি একটি বিট-ফিল্ড is সমস্ত ক্ষেত্রে, অ্যাসাইনমেন্টটি ডান এবং বাম অপারেন্ডগুলির মান গণনার পরে এবং অ্যাসাইনমেন্ট এক্সপ্রেশনটির মান গণনার আগে ক্রমযুক্ত হয়।
কেবলমাত্র পার্থক্যটি সর্বশেষ বাক্যটি N3337 এ অনুপস্থিত ab
যেমন বাম প্রতীক শেষ বাক্য অবশ্য কোনো গুরুত্ব না i
তন্ন তন্ন হয় "অন্য পার্শ্ব প্রতিক্রিয়া" কিংবা "একই স্কালে বস্তুর মান ব্যবহার" হিসাবে আইডি প্রকাশ একটি lvalue হয়।
i = i++ + 1;
।