Function Try Blocks

Catching All Exceptions

How can I catch all exceptions in a function try block?

Abstract art representing computer programming

To catch all exceptions in a function try block, you can use the ellipsis (...) as the exception type in the catch block. This is known as a catch-all handler and it will catch any type of exception that is thrown within the function try block.

Here's an example:

#include <iostream>
#include <stdexcept>

void processValue(int value) try {
  if (value < 0) {
    throw std::invalid_argument{"Negative value"};
  }
  if (value == 0) {
    throw std::runtime_error{"Zero value"};
  }
// Process the value
} catch (...) {
  std::cout << "An exception occurred\n";
}

int main() {
  processValue(42);
  processValue(-5);
  processValue(0);
}
An exception occurred
An exception occurred

In this example, the processValue function uses a function try block to catch any exceptions that may be thrown. The catch block uses the ellipsis (...) to catch all types of exceptions.

Inside the function, different exceptions (std::invalid_argument and std::runtime_error) are thrown based on the value of the parameter. However, the catch-all handler catches both exceptions and prints a generic message.

When processValue is called with different values in the main() function, the exceptions are caught by the catch-all handler, and the corresponding message is printed.

Using a catch-all handler can be useful when you want to handle all exceptions in a generic way, without specifying each exception type explicitly. However, it's generally recommended to catch specific exceptions whenever possible, as it provides more control and allows for targeted exception handling.

If you need to access the caught exception object in the catch-all handler, you can rethrow it to another catch block that catches a specific exception type or a base class of the exception hierarchy.

#include <stdexcept>
#include <iostream>

void processValue(int value) try {
  // ...
} catch (...) {
  std::cout << "An exception occurred\n";
  throw;  // Rethrow the exception
}

int main() {
  try {
    processValue(42);
    processValue(-5);
    processValue(0);
  } catch (const std::exception& e) {
    std::cout << "Exception caught: "
      << e.what() << "\n";
  }
}

In this modified example, the catch-all handler rethrows the caught exception using throw. The exception is then caught in the main() function by a catch block that catches std::exception, which is a base class for many standard exception types. This allows you to access the exception object and retrieve more information about the exception.

Remember, while catch-all handlers can be convenient, it's generally better to catch specific exceptions when possible to handle them appropriately based on their type.

This Question is from the Lesson:

Function Try Blocks

Learn about Function Try Blocks, and their importance in managing exceptions in constructors

Answers to questions are automatically generated and may not have been reviewed.

This Question is from the Lesson:

Function Try Blocks

Learn about Function Try Blocks, and their importance in managing exceptions in constructors

A computer programmer
Part of the course:

Professional C++

Comprehensive course covering advanced concepts, and how to use them on large-scale projects.

Free, unlimited access

This course includes:

  • 124 Lessons
  • 550+ Code Samples
  • 96% Positive Reviews
  • Regularly Updated
  • Help and FAQ
Free, Unlimited Access

Professional C++

Comprehensive course covering advanced concepts, and how to use them on large-scale projects.

Screenshot from Warhammer: Total War
Screenshot from Tomb Raider
Screenshot from Jedi: Fallen Order
Contact|Privacy Policy|Terms of Use
Copyright © 2024 - All Rights Reserved