Exceptions
In C++, an exception is a runtime error that occurs during the execution of a program. If not handled, it stops the program execution. The computer will create an exception
, and if the code does not have a way to handle it, then the program will stop executing due to the error.
Catching an Exception
The function getString()
as defined below will throw an exception if an index outside the allowable bounds is attempted to be accessed.
Errors, when uncaught, will cause a program to immediately stop. This behavior can be prevented by wrapping the code which might emit an error in a try
block, and providing at least one catch
block to execute if the code throws the error. Look at the improvement below:
The parenthesized ellipsis above indicate that the catch
should try to catch any and all errors. It is possible be more specific by replacing the ellipsis with the error type that would be thrown for common inputs:
catch (std::length_error)
would catch the specific error that will be throwncatch (std::length_error errorName)
would not only catch the same error, but give us access to the error object inside thecatch
block with the variableerrorName
It is possible to catch multiple types of exception by specifying multiple catch blocks:
int main() {try {// Code goes here}catch (int intErrorVariable) {// The thrown error was of type int}catch (std::exception exceptionVariable) {// The thrown error was of type exceptionstd::cout << exceptionVariable.what();}catch (...) {// The ellipsis}}
This example also names the exceptions so that the exception may be accessed during the catch block. If the exception is of type std::exception
(or one of the classes which inherit from it), .what()
can be called on the caught exception to read the error message.
Throwing an Exception
While one side of the exceptional coin is catching exceptions, the other side is throwing them. Since user input is often unpredictable, it is important to handle bad data with grace.
The sqrt()
function provided by the math.h
library calculates square roots, however it will return nan
for the square root of negative numbers. The example below creates a custom mySqrt()
function so that an exception is thrown when a negative number is passed in as a parameter. This allows us to catch
it in our main
block rather than testing if the returned valued is equal to nan
.
While it is possible to use throw
with many data types, it is common to throw a runtime error. The syntax can be seen in the example below:
This program will run, and output the following:
Square root of 4.41 is 2.1ERROR: Negative numbers not allowed
All contributors
- Anonymous contributor
- Prince25
- Christine_Yang
- garanews
- christian.dinh
- Anonymous contributor
- short_matthew_f
Contribute to Docs
- Learn more about how to get involved.
- Edit this page on GitHub to fix an error or make an improvement.
- Submit feedback to let us know how we can improve Docs.