কোন কম্পাইলার মূল্য তার লবণ ঠিক কোন বিল্ট-ইন টাইপ (উভয় নির্মান জন্য একই মেশিনে ভাষার ক্রম উত্পন্ন করবে int
, float
ইত্যাদি) যতদিন বিবৃতি সত্যিই হিসাবে সহজ হিসাবে হিসাবে x = x + a;
এবং অপ্টিমাইজেশান সক্রিয় করা হয় । (উল্লেখযোগ্যভাবে, জিসিসি -O0
, যা ডিফল্ট মোড, অ্যান্টি-অপ্টিমাইজেশানগুলি সম্পাদন করে যেমন মেমরিতে সম্পূর্ণ অপ্রয়োজনীয় স্টোরগুলি সন্নিবেশ করানো যাতে ডিবাগাররা সর্বদা পরিবর্তনশীল মানগুলি খুঁজে পেতে পারে তা নিশ্চিত করার জন্য))
বিবৃতি যদি আরও জটিল হয় তবে এগুলি ভিন্ন হতে পারে। মনে করুন f
একটি ফাংশন যা একটি পয়েন্টার দেয়, তারপরে
*f() += a;
f
শুধুমাত্র একবার কল , যদিও
*f() = *f() + a;
দু'বার ডাকছে। যদি f
পার্শ্ব প্রতিক্রিয়া আছে, দুই এক (সম্ভবত আধুনিক) ভুল হবে। এমনকি যদি f
পার্শ্ব প্রতিক্রিয়া নেই, কম্পাইলার, দ্বিতীয় কল নিষ্কাশন করতে সক্ষম নাও হতে পারে, তাই আধুনিক প্রকৃতপক্ষে মন্থর হতে পারে।
এবং যেহেতু আমরা এখানে সি ++ এর কথা বলছি, শ্রেণি ধরণের ক্ষেত্রে ওভারলোড operator+
ও করা পরিস্থিতি সম্পূর্ণ আলাদা operator+=
। যদি x
এ জাতীয় ধরণ থাকে, তবে - অপ্টিমাইজেশনের আগে - x += a
অনুবাদ করে
x.operator+=(a);
যেখানে x = x + a
অনুবাদ
auto TEMP(x.operator+(a));
x.operator=(TEMP);
এখন, ক্লাসটি সঠিকভাবে লেখা থাকলে এবং সংকলকের অপ্টিমাইজারটি যথেষ্ট ভাল, উভয়ই একই মেশিনের ভাষা উত্পন্ন করবে, তবে এটি কোনও অন্তর্নির্মিত প্রকারের মতো নিশ্চিত জিনিস নয়। স্ট্রস্ট্রপ যখন ব্যবহারের জন্য উত্সাহিত করেন তখন সম্ভবত এটিই চিন্তাভাবনা করে +=
।