WINAPI SetLastError против C ++ Keword Throw - PullRequest
0 голосов
/ 29 апреля 2010

В чем разница между WINAPI SetLastError() и ключевым словом C ++ throw? Например, SetLastError(5); и throw 5; одинаковы?

Ответы [ 2 ]

8 голосов
/ 29 апреля 2010

SetLastError устанавливает простую глобальную переменную, она никак не влияет на поток программы.

throw остановит поток работающей программы, размотает стек до тех пор, пока он не будет где-то перехвачен предложением try-catch. Затем выполнение программы продолжится с конца улова.

Предлагаю прочитать эту статью, которая объясняет концепцию исключений. И читайте об исключениях C ++.

  • Кроме того, не выбрасывайте 5, бросайте не встроенный объект, предпочтительно наследуемый std :: exception. Объект может содержать некоторое состояние, указывающее предложению catch, что делать с ошибкой.
4 голосов
/ 29 апреля 2010

throw выдает исключение, которое перехватывается блоком catch и является частью языка C ++. SetLastError() является частью специфичного для Windows API от Microsoft, который изменяет значение, возвращаемое GetLastError(). Другими словами, они совершенно разные! Создание исключения разматывает стек (вызывает деструкторы для всех локальных переменных) и перемещает выполнение программы в соответствующий блок catch. SetLastError() ничего такого не делает, это просто функция API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...