Я недавно пытался запустить этот код в ideone.com …
#include <iostream>
#include <string>
using namespace std;
int getVal(string name)
{
if (name == "Devashish") return 0;
return 1;
}
int main()
{
cout << 5 / getVal("Devashish");
return 0;
}
Интересно, что этот код не выдал никаких исключений и вывел 5 на выходе. Код специально написан для создания исключения. Вот идеальная ссылка на успешную компиляцию и выполнение ошибочного кода: http://ideone.com/ogDzDU
Когда я попытался выполнить тот же код в Visual Studio, я получил исключение (что и ожидалось). Просто любопытно. Почему идеон вел себя так? Это ошибка в их компиляторах или какой-то другой программе?
Деление на ноль в программе на C ++ имеет строго неопределенное поведение.
Это означает, что никто не может сказать, как ваша программа будет вести себя. Это мог поднять исключение, но нет никакой гарантии, что это произойдет. Это может также работать гладко и оставить вас в недоумении, как и сейчас.
Это природа UB. Вы определенно не должны иметь UB в своем коде, потому что только тогда вы можете рассуждать об этом. Но оставляя поведение неопределенным, стандарт C ++ дает реализации большие возможности для оптимизации. Им не нужно постоянно добавлять проверки, которые вызывают исключения, когда мы, как программисты, ошибаемся.
Других решений пока нет …