Почему ideone.com делает это?

Я недавно пытался запустить этот код в 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, я получил исключение (что и ожидалось). Просто любопытно. Почему идеон вел себя так? Это ошибка в их компиляторах или какой-то другой программе?

0

Решение

Деление на ноль в программе на C ++ имеет строго неопределенное поведение.

Это означает, что никто не может сказать, как ваша программа будет вести себя. Это мог поднять исключение, но нет никакой гарантии, что это произойдет. Это может также работать гладко и оставить вас в недоумении, как и сейчас.

Это природа UB. Вы определенно не должны иметь UB в своем коде, потому что только тогда вы можете рассуждать об этом. Но оставляя поведение неопределенным, стандарт C ++ дает реализации большие возможности для оптимизации. Им не нужно постоянно добавлять проверки, которые вызывают исключения, когда мы, как программисты, ошибаемся.

5

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

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

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