Структурированные исключения (SE) из вызовов стандартной библиотеки - PullRequest
2 голосов
/ 19 февраля 2011

У меня есть код, который вызывает :: fgetpos, что приводит к исключению ядра, которое не может быть перехвачено (у меня есть опция / ehs в моем проекте VS 2008).Но я не могу не думать, что стандартные библиотечные процедуры не должны никогда генерировать подобные исключения.

update : я пытался вызвать :: fgetpos (0, & foo), что явно неверно, и я действительно получил исключение на уровне ядра.Я сбит с толку.Почему стандартная библиотека C ++ не выполняет самые базовые проверки аргументов (проверка на нулевой указатель) и вызывает std :: invalid_argument?

Выполняют ли какие-либо стандартные процедуры стандартной библиотеки такие базовые проверки или все они счастливывызвать завершение программы?

1 Ответ

1 голос
/ 20 февраля 2011

Почему стандартная библиотека C ++ не выполняет самые базовые проверки аргументов (проверка на нулевой указатель)

Потому что вы можете сделать это самостоятельно, если вам нужна проверка.Философия C ++ заключается в том, что вы не платите за то, что вам не нужно.Если я умный программист и никогда не передам недопустимые аргументы в функцию, почему я должен иметь потенциальную потерю производительности моей программы из-за ненужных проверок?

Вот почему, например, std::vector предоставляет и operator[] и at(), где последний выполняет проверку границ, а первый - нет.Если вам нужен чек, добавьте его.

...