Да, это действительно C ++. Одна цель, которую я нашел для этого, состоит в том, чтобы преобразовать исключения в возвращаемые значения, и иметь код, переводящий исключения в возвращаемых значениях, отдельно от другого кода в функции. Да, вы можете return x;
из блока catch, подобного тому, который вы показали (на самом деле, я только недавно обнаружил это). Но я бы, вероятно, просто использовал другой уровень скобок и поместил try / catch внутри функции в этом случае. Это будет более знакомо большинству программистов C ++.
Другая цель состоит в том, чтобы перехватывать исключения, генерируемые списком инициализатора конструктора, который использует аналогичный синтаксис:
struct f {
g member;
f() try {
// empty
} catch(...) {
std::cerr << "thrown from constructor of g";
}
};