Вопрос

У меня есть функция, которая делает следующее:

  • Когда функция вызывается и ей передается значение true bool, она устанавливает статическое значение bool в значение true.
  • Когда функция вызывается и передает строку, если для статического значения bool установлено значение true, она что-то сделает с этой строкой.

Вот что меня беспокоит: останется ли статическая переменная одинаковой между двумя перегруженными функциями?Если нет, я могу просто создать отдельную функцию, предназначенную для отслеживания значения bool, но я стараюсь не усложнять задачу.

Это было полезно?

Решение

Нет, он создает две отдельные статические переменные — по одной для каждой функции.Имя любой функции 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 С таким же идентификатором они принадлежат в разных областях, и идентификатор относится к отчетливой переменной в каждой функции.

Если вам нужно делиться состоянием между двумя функциями, вам, вероятно, лучше внести класс для инкапсуляции этого состояния и сделать две функции функции членов этого класса.

Ответ - нет. Нет причин это должно быть, поскольку ведь мы говорим о 2 функциях.

Так как это уже было продемонстрировано, я хотел бы обратиться к самому основну: static.

static Вводит глобальное государство, а глобальное государство зло. Это приводит к тонким ошибкам, трудностям для правильной проверки (так как тест влияет на те, которые выполняются после нее) и даже не думают о том, что там многоподобные ...

Поэтому я бы действительно поощрил вас, чтобы избежать static полностью. У вас будет 2 решения:

  • Сделайте класс с двумя перегрузками как методы, а состояние хранения (не статично, пожалуйста)
  • Передайте BOOL в качестве параметра к методам, выключатель для перегрузки BOOL и параметра для перегрузки строки

Забрать, какой бы легче добиться.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top