throw
ExpressionThe detecting part of a program uses a throw
expression to raise an exception. A throw
consists of the keyword throw
followed by an expression. The type of the expression determines what kind of exception is thrown. A throw
expression is usually followed by a semicolon, making it into an expression statement.
As a simple example, recall the program in § 1.5.2 (p. 23) that added two objects of type Sales_item
. That program checked whether the records it read referred to the same book. If not, it printed a message and exited.
Sales_item item1, item2;
cin >> item1 >> item2;
// first check that item1 and item2 represent the same book
if (item1.isbn() == item2.isbn()) {
cout << item1 + item2 << endl;
return 0; // indicate success
} else {
cerr << "Data must refer to same ISBN"
<< endl;
return -1; // indicate failure
}
In a more realistic program, the part that adds the objects might be separated from the part that manages the interaction with a user. In this case, we might rewrite the test to throw an exception rather than returning an error indicator:
// first check that the data are for the same item
if (item1.isbn() != item2.isbn())
throw runtime_error("Data must refer to same ISBN");
// if we're still here, the ISBNs are the same
cout << item1 + item2 << endl;
In this code, if the ISBNs differ, we throw an expression that is an object of type runtime_error
. Throwing an exception terminates the current function and transfers control to a handler that will know how to handle this error.
The type runtime_error
is one of the standard library exception types and is defined in the stdexcept
header. We’ll have more to say about these types in § 5.6.3 (p. 197). We must initialize a runtime_error
by giving it a string
or a C-style character string (§ 3.5.4, p. 122). That string provides additional information about the problem.
18.220.152.139