আমি মনে করি মূল্যায়নের আদেশ সংক্রান্ত খসড়া মানের এই অংশটি প্রাসঙ্গিক:
1.9 প্রোগ্রাম কার্যকর
...
- উল্লিখিত ব্যতীত, পৃথক অপারেটরগুলির ক্রিয়াকলাপগুলির মূল্যায়ন এবং স্বতন্ত্র এক্সপ্রেশনগুলির subexpresstions অসমর্থিত। অপারেটরের অপারেন্ডসের মান গণনা অপারেটরের ফলাফলের মান গণনার আগে ক্রমযুক্ত হয়। যদি কোনও স্কেলার অবজেক্টের পার্শ্ব প্রতিক্রিয়া একই স্কেলার অবজেক্টের অন্য কোনও পার্শ্ব প্রতিক্রিয়া বা একই স্কেলার অবজেক্টের মান ব্যবহার করে একটি মান গণনার তুলনায় অসম্পূর্ণ হয় এবং তারা সম্ভাব্য একযোগে না হয় তবে আচরণটি অপরিবর্তিত
এবং যদিও:
5.2.2 ফাংশন কল
...
- [দ্রষ্টব্য: পোস্টফিক্স এক্সপ্রেশন এবং আর্গুমেন্টগুলির মূল্যায়নগুলি একে অপরের তুলনায় অনিচ্ছাকৃত। ফাংশনটি প্রবেশের আগে যুক্তির মূল্যায়নের সমস্ত পার্শ্ব প্রতিক্রিয়াগুলি ক্রমযুক্ত হয় - শেষ নোট]
সুতরাং আপনার লাইনের c.meth1(&nu).meth2(nu);
জন্য, চূড়ান্ত কলের জন্য ফাংশন কল অপারেটরের ক্ষেত্রে অপারেটরে কী ঘটছে তা বিবেচনা করুন meth2
, সুতরাং আমরা স্পষ্টভাবে পোস্টফিক্স এক্সপ্রেশন এবং যুক্তির মধ্যে ভাঙ্গন দেখতে পাচ্ছি nu
:
operator()(c.meth1(&nu).meth2, nu);
পোস্টসাফিক্স মত প্রকাশ ও যুক্তির মূল্যায়ন চূড়ান্ত ফাংশন কল জন্য (পোস্টসাফিক্স অভিব্যক্তি অর্থাৎ c.meth1(&nu).meth2
এবং nu
) হয় একে অপরের সাথে unsequenced আপেক্ষিক অনুযায়ী ফাংশন কল উপরে নিয়ম। সুতরাং, স্কেলার অবজেক্টে পোস্টফিক্স এক্সপ্রেশনটির গণনার পার্শ্ব-প্রতিক্রিয়াটি ফাংশন কলের আগে ar
যুক্তির মূল্যায়নের তুলনায় অনিচ্ছাকৃত । দ্বারা প্রোগ্রাম সঞ্চালনের উপরে নিয়ম, এই অনির্ধারিত আচরণ।nu
meth2
অন্য কথায়, কলের পরে কলটিতে nu
যুক্তির মূল্যায়ন করার জন্য সংকলকটির কোনও প্রয়োজন নেই - মূল্যায়নকে প্রভাবিত করার কোনও পার্শ্ব-প্রতিক্রিয়া ধরে নেওয়া নিখরচায় ।meth2
meth1
meth1
nu
উপরের দ্বারা উত্পাদিত সমাবেশ কোডটি main
ফাংশনে নিম্নলিখিত ক্রমটি অন্তর্ভুক্ত করে :
- পরিবর্তনশীল
nu
স্ট্যাক বরাদ্দ এবং 0 দিয়ে আরম্ভ করা হয়।
- একটি রেজিস্টার (
ebx
আমার ক্ষেত্রে) এর মানটির একটি অনুলিপি পানnu
- ঠিকানা
nu
এবং c
প্যারামিটার রেজিস্টার মধ্যে লোড করা হয়
meth1
বলা হয়
- ফেরত মান রেজিস্টার এবং পূর্বে ক্যাশে মান এর
nu
মধ্যে ebx
রেজিস্টার প্যারামিটার রেজিস্টার মধ্যে লোড করা হয়
meth2
বলা হয়
সমালোচনামূলকভাবে, 5 ধাপে সংকলক উপরে nu
পদক্ষেপ 2 থেকে ক্যাশেড মানটি ফাংশন কলটিতে পুনরায় ব্যবহার করতে দেয় meth2
। এখানে এটি সম্ভাবনাটিকে অগ্রাহ্য করে - nu
কলটিতে meth1
- 'কার্যত নির্ধারিত আচরণ' - এ কল করা হতে পারে ।
দ্রষ্টব্য: এই উত্তরটি তার আসল রূপ থেকে পদার্থে পরিবর্তিত হয়েছে। চূড়ান্ত ফাংশন কলটি ভুল হওয়ার আগে অপারেন্ড গণনার পার্শ্ব-প্রতিক্রিয়ার দিক দিয়ে আমার প্রাথমিক ব্যাখ্যাটি যথাযথ নয়, কারণ তারা। সমস্যাটি হ'ল এই যে অপারেশনগুলির গণনাগুলি অনির্দিষ্টকালের জন্য ক্রমযুক্ত।