Создайте постоянную переменную, если выполнено выражение «if» - PullRequest
3 голосов
/ 23 сентября 2019

Я хотел бы знать, можем ли мы создать постоянную переменную внутри оператора if.Таким образом, переменная начинает существовать с того времени в программе.

Например:

if (true)  //this statement happens ONLY ONCE
{
      const variable = x;
}

1 Ответ

4 голосов
/ 23 сентября 2019

Основная проблема заключается в том, что вы не можете напрямую ссылаться на переменную вне тела if.

Простой обходной путь - указатель вашего типа во внешней области видимости по умолчанию установлен на nullptr, затем используйте static или thread_local в if и установите для внешнего указателя области следующее:

Foo* f = nullptr;
if (/*condition*/){
      static Foo foo;
      f = &foo;
}

Вы можете сделать типы const по мере необходимости.Другим подходом может быть использование std::variant или std::optional.

Если, однако, вы реализуете что-то в качестве средства, чтобы секция кода выполнялась только один раз, стандартный способ сделать этоиспользуйте

std::once_flag flag; 
std::call_once(flag, []{/* ToDo - code here */});
...