আমার যদি দুটি পৃথক ধ্রুবক সদস্যের ভেরিয়েবল থাকে, যা উভয়টির একই ফাংশন কলের ভিত্তিতে আরম্ভ করা দরকার, ফাংশনটি দুটিবার কল না করে এটি করার কোনও উপায় আছে কি?
উদাহরণস্বরূপ, একটি ভগ্নাংশ শ্রেণি যেখানে অংকের এবং ডিনোমিনিটর স্থির থাকে।
int gcd(int a, int b); // Greatest Common Divisor
class Fraction {
public:
// Lets say we want to initialize to a reduced fraction
Fraction(int a, int b) : numerator(a/gcd(a,b)), denominator(b/gcd(a,b))
{
}
private:
const int numerator, denominator;
};
জিসিডি ফাংশনটি দু'বার ডাকা হওয়ার কারণে এটি নষ্ট সময়ে ফলাফল দেয়। আপনি কোনও নতুন শ্রেণীর সদস্যকে সংজ্ঞায়িত করতে পারেন gcd_a_b
, এবং প্রথমে প্রারম্ভিক তালিকায় সেই সাথে জিসিডি আউটপুট বরাদ্দ করতে পারেন, তবে তারপরে এটি নষ্ট স্মৃতিতে বাড়ে।
সাধারণভাবে, নষ্ট ফাংশন কল বা মেমরি ছাড়াই এটি করার কোনও উপায় আছে? আপনি সম্ভবত একটি প্রাথমিকের তালিকায় অস্থায়ী পরিবর্তনগুলি তৈরি করতে পারেন? ধন্যবাদ.
-O3
। তবে সম্ভবত কোনও সাধারণ পরীক্ষার বাস্তবায়নের জন্য এটি ফাংশন কলটি ইনলাইন করবে line আপনি যদি __attribute__((const))
কোনও দৃশ্যমান সংজ্ঞা না দিয়ে প্রোটোটাইপটিতে শুদ্ধ ব্যবহার করেন বা শুদ্ধ হন, এটি একই আর্গ দিয়ে দুটি কলের মধ্যে জিসিসি বা ক্ল্যাংকে সাধারণ-সুপ্রেসপ্রেসেশন নির্মূলকরণ (সিএসই) করতে দেওয়া উচিত। মনে রাখবেন যে ড্রুর উত্তরটি খাঁটি অ-কার্যকারী কাজের জন্যও কাজ করে তাই এটি আরও ভাল এবং ফানকটি ইনলাইন না করে এমন কোনও সময় আপনার এটি ব্যবহার করা উচিত।