প্রযুক্তিগতভাবে, সামগ্রিকভাবে এটি অনির্ধারিত আচরণ ।
তবে, উত্তরের দুটি গুরুত্বপূর্ণ দিক রয়েছে।
কোড বিবৃতি:
std::cout << a++ << a;
হিসাবে মূল্যায়ন করা হয়:
std::operator<<(std::operator<<(std::cout, a++), a);
মান কোনও ক্রিয়ায় আর্গুমেন্টের মূল্যায়নের ক্রম সংজ্ঞায়িত করে না।
সুতরাং হয়:
std::operator<<(std::cout, a++)
প্রথমে মূল্যায়ন করা হয় বা
a
প্রথমে মূল্যায়ন করা হয় বা
- এটি কোনও বাস্তবায়ন সংজ্ঞায়িত আদেশ হতে পারে।
এই অর্ডারটি অনির্ধারিত [রেফ 1] ।
[রেফার 1] সি ++ 03 5.2.2 ফাংশন কল করুন
প্যারা 8
যুক্তিগুলির মূল্যায়নের ক্রমটি অনির্ধারিত । ফাংশন প্রবেশের আগে যুক্তি প্রকাশের মূল্যায়নের সমস্ত পার্শ্ব প্রতিক্রিয়া কার্যকর হয়। পোস্টফিক্স এক্সপ্রেশন এবং আর্গুমেন্ট এক্সপ্রেশন তালিকার মূল্যায়নের ক্রমটি অনির্দিষ্ট।
আরও একটি ফাংশনে আর্গুমেন্টের মূল্যায়নের মধ্যে কোনও সিকোয়েন্স পয়েন্ট নেই তবে সমস্ত আর্গুমেন্ট [রেফ 2] এর মূল্যায়ন করার পরেই একটি সিকোয়েন্স পয়েন্ট বিদ্যমান ।
[রেফ 2) সি ++ 03 1.9 প্রোগ্রাম কার্যকরকরণ [অন্তঃসারণ]:
অনুচ্ছেদ 17:
কোনও ফাংশন কল করার সময় (ফাংশনটি ইনলাইন হোক বা না থাকুক), ফাংশন শরীরে কোনও অভিব্যক্তি বা বিবৃতি কার্যকর করার আগে ঘটে যাওয়া সমস্ত ফাংশন আর্গুমেন্টের (যদি থাকে) মূল্যায়নের পরে একটি ক্রম বিন্দু থাকে।
মনে রাখবেন যে, এখানে মান c
হ'ল কোনও হস্তক্ষেপের ক্রম বিন্দু ছাড়াই একাধিকবার অ্যাক্সেস করা হচ্ছে, এ সম্পর্কে মানটি বলে:
[রেফ 3) সি ++ 03 5 এক্সপ্রেশন [এক্সপ্রেস]:
প্যারা 4:
....
পূর্ববর্তী এবং পরবর্তী সিকোয়েন্স পয়েন্টের মধ্যে একটি স্কেলার অবজেক্টের তার সঞ্চিত মানটি একবারে প্রকাশের মূল্যায়নের মাধ্যমে একবারে পরিবর্তিত হবে। তদ্ব্যতীত, পূর্বের মানটি কেবলমাত্র সংরক্ষণ করা হবে তা নির্ধারণের জন্য অ্যাক্সেস করা উচিত । এই অনুচ্ছেদে প্রয়োজনীয়তাগুলি একটি সম্পূর্ণ অভিব্যক্তিটির subexpresstions প্রতিটি অনুমতিযোগ্য ক্রম জন্য পূরণ করা হবে; অন্যথায় আচরণটি সংজ্ঞায়িত ।
কোডটি c
সিকোয়েন্স পয়েন্টকে হস্তক্ষেপ না করে একাধিকবার সংশোধন করে এবং সঞ্চিত বস্তুর মান নির্ধারণের জন্য এটি অ্যাক্সেস করা হচ্ছে না। এই উপরে দফা সুস্পষ্ট লঙ্ঘন এবং অত: পর ফলে মান দ্বারা বাধ্যতামূলক হয় অনির্ধারিত আচরণ [সূত্র 3] ।