الكلمة الأساسية الثابتة تحفظ القيمة التي يتم إرجاعها بواسطة الوظيفة؟

StackOverflow https://stackoverflow.com//questions/20010408

  •  20-12-2019
  •  | 
  •  

سؤال

لدي العديد من الوظائف في البرنامج الذي أكتبه والتي تستخدم قيمة أحتاج إلى حسابها باستخدام وظيفة بطيئة جدًا.ستتغير هذه القيمة في كل مرة يتم فيها إعادة تشغيل البرنامج، لذا لا يمكنني تخزين قيمة ثابتة فحسب.أدناه مثال.

void this_gets_called_frequently()
{
    static int value = slow_function();

    //do stuff with the above value
}

مشكلتي الرئيسية هنا ليست مشكلة عدم عمل البرنامج، بل مشكلة نظافة البرنامج.لا أرغب حقًا في تهيئة متغير عام وتخزين القيمة فيه، لأنه لن يتغير بمجرد حسابه.هل سيؤدي استخدام الكلمة الأساسية الثابتة بالطريقة الموضحة أعلاه إلى استدعاء الوظيفة أعلاه فقط ليتم حسابها مرة واحدة؟هل ستساعد الكلمة الأساسية const المضافة هناك؟

شكرا للجميع، تم الرد على هذا تماما!

هل كانت مفيدة؟

المحلول

نعم، سيحدث تهيئة متغير الأجيال المحلي للأجيال المحلي مرة واحدة مرة واحدة (على الرغم من أنني أذكر بعض إصدارات التحويل البرمجي قد تواجه مشاكل في مؤشرات متعددة هنا). static غير مطلوب، في هذه الحالة، في الغالب مسألة لقراءة أو تذوق.

نصائح أخرى

هل سيؤدي استخدام الكلمة الأساسية الثابتة بالطريقة الموضحة أعلاه إلى استدعاء الوظيفة أعلاه فقط ليتم حسابها مرة واحدة؟

نعم عند أول استدعاء this_gets_called_frequently

هل ستساعد الكلمة الأساسية const المضافة هناك؟

لا.لكن أضف const لقيمة التوثيق.

قد تستخدم استخدام

المتغيرات المحلية مؤشر الترابط من C ++ 11، إذا كانت متوفرة في برنامج التحويل البرمجي الخاص بك.إذا كنت على Windows، يمكنك استخدام API Gransodicetagcode مماثلة.هناك منذ فجر Win32.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top