В C ++ допустимо ли для конструктора объекта, который будет брошен сам, генерировать исключение? Другими словами, мы еще в броске, пока мы еще строим объект для броска?
struct Error {
Error() {
if (someCondition()) {
throw anotherObject();
}
}
};
void test() {
throw Error();
}
Выражение броска должно быть throw Error();
, но да, это действительно.
Перед Error
объект может быть брошен, он должен быть построен. То есть подвыражение Error()
должны быть оценены до throw
Оператор может быть оценен в полном выражении. Если оценка подвыражения Error()
сама выдает исключение, остальную часть полного выражения (т.е. throw
) не будет оцениваться.
Других решений пока нет …