Как я могу сделать ссылочный аргумент bool по умолчанию? - PullRequest
0 голосов
/ 29 января 2012

В C ++ возможно ли сделать аргумент bool & функции необязательным?

void foo(bool &argument = /* What goes here? */);

В моей функции foo, если вызывающая программа не заботится о результате, введенном в аргумент, я 'Мне бы хотелось, чтобы компилятор дал фиктивное расположение по умолчанию.В противном случае, абоненты, которым все равно, должны сделать это:

bool ignored;

foo(ignored);

Ответы [ 5 ]

6 голосов
/ 29 января 2012

Сделать другую функцию

void foo(){
  bool b=true;
  foo(b);
}
2 голосов
/ 29 января 2012

Единственный способ - передать глобальную переменную:

bool someArgument = false;

void foo(bool &argument = someArgument );
0 голосов
/ 29 января 2012

Неконстантный ссылочный аргумент означает, что ваша функция намеревается изменить передаваемый объект. Если вы знаете, какой объект вы хотите использовать по умолчанию, просто используйте его в качестве аргумента по умолчанию.

Если вы не собираетесь изменять передаваемый bool, вам следует объявить, что функция принимает bool argument (т.е. не ссылка) или const bool &argument. В любом случае вы можете указать постоянное значение по умолчанию true или false.

0 голосов
/ 29 января 2012

В идеале вы должны использовать перегрузку функций, а не пытаться обойти систему. Хотя есть законные способы добиться этого, как упомянутое @VJovic. С перегрузками функций вы можете сделать другие параметры необязательными, если вам когда-нибудь понадобится добавить больше.

0 голосов
/ 29 января 2012

Вы можете сделать это.Но это очень уродливо и портит локальность данных:

static bool result__ = false;

static void foo(bool & result = result__)
{
        result = true;
}

int main()
{
        bool v;
        foo();
        foo(v);
        return v ? 0 : 1;
}

Поскольку C ++ поддерживает перегрузку функций, используйте решение @ QuentinUK.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...