আপনার প্রশ্নের সঠিক উত্তর যা সঠিক তা হ'ল: কারণ এটি অপরিজ্ঞাত।
ঠিক আছে, আপনারা সবাই আমাকে জ্বালানোর আগে ..
আপনি সকলেই উত্তর দিয়েছেন কেন i+=i++
ফলাফলটি সঠিক এবং যৌক্তিক i=0
।
আপনার উত্তরগুলির প্রতি 1 টিতে ভোট নেওয়ার জন্য আমি প্রলুব্ধ হয়েছিলাম তবে আমি যে সুনামের অঙ্ক করেছি তা খুব বেশি হবে ..
আমি কেন আপনাদের প্রতি এত পাগল? আপনার উত্তরগুলি যা ব্যাখ্যা করে তার জন্য নয় ..
আমার অর্থ, আমি যে প্রতিটি উত্তর পড়েছি তা অসম্ভবকে ব্যাখ্যা করার জন্য একটি দুর্দান্ত প্রচেষ্টা করেছিল, আমি সাধুবাদ!
তবে ফলাফল কী ?? এটি কি স্বজ্ঞাত ফলাফল - এটি গ্রহণযোগ্য ফলাফল ??
আপনার প্রত্যেকে "নগ্ন রাজা" দেখেছেন এবং কোনওরকমে এটিকে যুক্তিযুক্ত রাজা হিসাবে গ্রহণ করেছেন।
আপনারা সবাই ভুল!
i+=i++;
ফলাফল 0
অনির্ধারিত হয়।
ভাষা মূল্যায়ন ব্যবস্থায় একটি বাগ আপনি করতে পারেন .. বা আরও খারাপ! নকশায় একটি বাগ।
একটি প্রমাণ চান? অবশ্যই আপনি চান!
int t=0; int i=0; t+=i++; //t=0; i=1
এখন এটি ... স্বজ্ঞাত ফলাফল! কারণ আমরা প্রথমে t
এটিকে একটি মান সহ নির্ধারিত মূল্যায়ন করেছিলাম এবং কেবল মূল্যায়ন ও অ্যাসাইনমেন্টের পরে আমাদের পোস্ট অপারেশনটি ঘটেছিল - যুক্তিযুক্ত তাই না?
এটি কি যুক্তিযুক্ত: i=i++
এবং i=i
একই ফলাফল প্রদান করে i
?
যখন t=i++
এবং t=i
জন্য বিভিন্ন ফলাফল i
।
পোস্ট অপারেশন এমন কিছু যা বিবৃতি মূল্যায়নের পরে হওয়া উচিত।
অতএব:
int i=0;
i+=i++;
আমরা লিখলে একই হওয়া উচিত:
int i=0;
i = i + i ++;
এবং তাই হিসাবে একই:
int i=0;
i= i + i;
i ++;
এবং তাই হিসাবে একই:
int i=0;
i = i + i;
i = i + 1;
1
আমরা যদি যুক্তিবাদী চিন্তাভাবনা নিয়ে চলি তবে কম্পাইলারের মধ্যে কোনও বাগ বা ভাষার নকশায় একটি বাগ নির্দেশ করে না এমন ফলাফল - তবে এমএসডিএন এবং অন্যান্য অনেক উত্স আমাদের বলে "ওহে - এটি অপরিজ্ঞাত!"
এখন আমি চালিয়ে যাওয়ার আগে, আমি যে উদাহরণ দিয়েছি সেগুলির এই সেটটি কেউ সমর্থন করে বা স্বীকৃত নয় .. তবে স্বজ্ঞাত এবং যুক্তিযুক্ত পদ্ধতি অনুসারে এটিই এর ফলস্বরূপ হওয়া উচিত ছিল।
কোডারকে কীভাবে সমাবেশটি লেখা বা অনুবাদ করা হচ্ছে তা সম্পর্কে কোনও জ্ঞান থাকা উচিত নয়!
যদি এটি এমনভাবে লেখা হয় যা ভাষার সংজ্ঞাগুলিকে সম্মান করবে না - এটি একটি বাগ!
এবং শেষ করতে আমি উইকিপিডিয়া, বর্ধন এবং হ্রাস অপারেটরগুলি
থেকে এটি অনুলিপি করেছি : যেহেতু বর্ধিত / হ্রাস অপারেটর তার অপারেন্ডকে পরিবর্তন করে, একই অভিব্যক্তির মধ্যে একাধিকবার এমন অপারেন্ড ব্যবহার অনির্ধারিত ফলাফল আনতে পারে । উদাহরণস্বরূপ, এক্স - ++ এক্স এর মত প্রকাশে, বিয়োগ বা বর্ধন অপারেটরগুলি কোন ক্রমটি করা উচিত তা পরিষ্কার নয়। সংকলক দ্বারা যখন অপ্টিমাইজেশন প্রয়োগ করা হয় তখন এর মতো পরিস্থিতি আরও খারাপ হয়, যার ফলস্বরূপ ক্রিয়াকলাপের উদ্দেশ্য অনুসারে ক্রিয়াকলাপ সম্পাদনের ক্রমটি আলাদা হতে পারে।
এবং সেইজন্য.
সঠিক উত্তরটি হ'ল এটি ব্যবহার করা উচিত নয়! (এটি নির্ধারিত হিসাবে!)
হ্যাঁ .. - সি # কমপ্লায়ার কোনওভাবে এটি স্বাভাবিক করার চেষ্টা করলেও এর অপ্রত্যাশিত ফলাফল রয়েছে।
আপনারা সকলেই ভাষার স্বাভাবিক বা সংজ্ঞায়িত আচরণ হিসাবে নথিভুক্ত আচরণের বর্ণনা দেওয়ার জন্য সি # এর কোনও নথিপত্র পাইনি। যা পেলাম ঠিক তার উল্টোটা!
[ পোস্টফিক্স বৃদ্ধি এবং হ্রাস অপারেটরদের জন্য এমএসডিএন ডকুমেন্টেশন থেকে অনুলিপি করা হয়েছে: ++ এবং - ]
কোনও পোস্টফিক্স অপারেটর যখন কোনও ফাংশন আর্গুমেন্টে প্রয়োগ করা হয়, তখন আর্গুমেন্টটির মানটি ফাংশনে পাস হওয়ার আগে বাড়ানো বা হ্রাস করার নিশ্চয়তা দেওয়া হয় না । আরও তথ্যের জন্য C ++ স্ট্যান্ডার্ডের বিভাগ 1.9.17 দেখুন।
এই শব্দগুলি গ্যারান্টিযুক্ত না লক্ষ্য করুন ...
যদি উত্তরটি অহংকারী মনে হয় তবে আমাকে ক্ষমা করুন - আমি অহঙ্কারী ব্যক্তি নই। আমি কেবল বিবেচনা করছি যে হাজার হাজার লোক এখানে শিখতে আসে এবং আমি যে উত্তরগুলি পড়ে তা তাদের বিভ্রান্ত করবে এবং তাদের যুক্তি এবং বিষয়টির বোঝার ক্ষতি করবে।