Удивительно, но я не могу найти ответ на этот вопрос по поиску и поиску SO (на SO есть много похожих вопросов, но связанных с другими языками).
Я подозреваю, что ответ no. Если это так, возникает очевидное неудобство, например
try
{
  std::string fname = constructFileName(); // can throw MyException
  ofstream f;
  f.exceptions(ofstream::failbit | ofstream::badbit);
  f.open(fname.c_str());
  // ...
}
catch (ofstream::failure &e)
{
  cout << "opening file " << fname << " failed\n"; // fname is not in the scope
}
catch (MyException &e)
{
  cout << "constructing file name failed\n";
}
Если мое предположение верно, как вы справляетесь с этим? Перемещая std::string fname; из try, я предполагаю?
Я понимаю, что область видимости определяется блоком {}, но это кажется разумным случаем для исключения hmm. Является ли причина того, что объекты могут быть не полностью построены, если выбрано исключение?
