Может ли конструктор для бросаемого объекта генерировать исключение?

В C ++ допустимо ли для конструктора объекта, который будет брошен сам, генерировать исключение? Другими словами, мы еще в броске, пока мы еще строим объект для броска?

struct Error {
Error() {
if (someCondition()) {
throw anotherObject();
}
}
};

void test() {
throw Error();
}

2

Решение

Выражение броска должно быть throw Error();, но да, это действительно.

Перед Error объект может быть брошен, он должен быть построен. То есть подвыражение Error() должны быть оценены до throw Оператор может быть оценен в полном выражении. Если оценка подвыражения Error() сама выдает исключение, остальную часть полного выражения (т.е. throw) не будет оцениваться.

9

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]