Этот кусок кода аварии на C++, так как он содержит деление на ноль ошибок:Можно ли уловить аппаратные ошибки в C++?
int main()
{
try {
int i = 0;
int j = 1/i;
} catch(...) {}
return 0;
}
Можно ли поймать ошибки, как это на различных платформах? Если вы знаете только некоторые из платформ, тогда вы можете ответить о тех, кого знаете.
У меня есть общее представление о SEH на Windows и сигналы в Linux, но я не уверен, есть ли способ поймать всевозможные аппаратные ошибки, как и ошибки программного обеспечения на C++.
Наконец, это выглядит как деление на ноль исключения могут быть пойманы в Python:
try:
i = 0
j = 1/i
except:
pass
И в Java:
public class Main {
public static void main(String[] args) {
try {
int i = 0;
int j = 1/i;
} catch (Exception e) {}
}
}
Так что мешает им быть пойманными в C++?
Это неопределенное поведение, это не исключение – Danh
Вы бы больше шансов получить это ответил, если бы вы сузили его до единой платформы. Он довольно широк, поскольку он стоит. –
Что мешает им попасть в C++, так это то, что C++ решил «как можно быстрее», даже если это означает, что разные платформы ведут себя по-другому ». Таким образом, платформа, в которой 1/0 оставила все регистры без изменений, будет прекрасной. Java и Python решили пойти «все платформы ведут себя одинаково», поэтому перед делением должна быть проверка нуля. –