سؤال

لدي وظيفة تقوم بما يلي:

  • عندما يتم استدعاء الوظيفة وتمرير قيمة منطقية حقيقية ، فإنها تحدد قيمة منطقية ثابتة إلى True
  • عندما يتم استدعاء الوظيفة وتجاوز سلسلة ، إذا تم ضبط قيمة المنحة الثابتة على صحيح ، فستفعل شيئًا بهذه السلسلة

إليكم اهتمامي - هل سيظل المتغير الثابت كما هو بين وظيفتين محمرين؟ إذا لم يكن الأمر كذلك ، يمكنني ببساطة إنشاء وظيفة منفصلة مصممة لتتبع قيمة منطقية ، لكنني أحاول الحفاظ على الأمور بسيطة.

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

المحلول

لا ، إنه يخلق متغيرين ثابتين منفصلين - واحد لكل وظيفة. يتم تصنيع اسم أي وظيفة C ++ من اسمها الظاهر وأنواع المعلمات الخاصة به ، ويتم توجيه اسم الثابت (من الناحية المفاهيمية على الأقل) إلى ذلك. بدلاً من إضافة وظيفة أخرى ، يمكنك التفكير في جعل المتغير ثابتًا فيما يتعلق بالفئة التي تحتوي على الوظائف ، على الرغم من أن هذا لا يمنحك نفس السلوك بالضبط ، أو وضعه في مساحة اسم مجهولة:

namespace {
   int myvar = 0;
}

int f( bool b ) {
   return myvar;
}

int f( const string &  s  ) {
   return myvar;
}

لجعل الوظائف أعضاء في الفصل:

// a.h
class A {
   public:
    static int f( bool b ) {
       return myvar;
    }

    static int f( const string &  s  ) {
       return myvar;
    }
  private:
     static int myvar;
};

// a.cpp
int A::myvar = 0;   

// main.cpp

#include <iostream>
#include <a.h>
int main() {
    std::cout << A::f(false) << A::f( string("foobar") ) << std::endl;   
}

نصائح أخرى

وظيفتان محمورتان هما وظيفتان مختلفتان. حتى لو كانت كل وظيفة تحتوي على ملف static bool مع نفس المعرف ، فإنها تنتمي إلى نطاقات مختلفة ويشير المعرف إلى متغير متميز في كل وظيفة.

إذا كنت بحاجة إلى مشاركة الحالة بين وظيفتين ، فربما يكون من الأفضل إنشاء فصل لتغليف هذه الحالة وجعل وظائف أعضاء الوظيفين في هذه الفئة.

الجواب لا. لا يوجد سبب ، لأنه بعد كل شيء نتحدث عن وظيفتين.

نظرًا لأنه قد تم إثباته بالفعل ، أود أن أتناول جوهر الأمر: static.

static يقدم الدولة العالمية ، والدولة العالمية شريرة. إنه يؤدي إلى حشرات خفية ، وصعوبات في الاختبار بشكل صحيح (لأن الاختبار يؤثر على تلك التي تم تنفيذها بعد ذلك) ولا تفكر في الذهاب إلى هناك ...

لذلك أشجعك حقًا على تجنب static تماما. عندها سيكون لديك حلان:

  • اصنع فصلًا مع الحمولة الزائدة كطرق ، وتخزين الحالة (غير ثابتة ، من فضلك)
  • تمرير منطقي كمعلمة إلى الأساليب ، والمعلمة الخارج

التقاط أيهما أسهل لتحقيقه.

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