具有无效输入异常处理的构造函数 C++
Constructor with exception handling for invalid input c++
我正在尝试创建一个构造函数来验证输入并在输入无效时抛出异常。
假设我有一个构造函数,它只接受 mod 12 中的值作为 int a,mod16 的值作为 b,以及大于 0 的值作为 c。我正在尝试使用 std::invalid_argument
。我将如何实现异常处理程序?这会抛出异常吗?如果输入的值超出范围?
Mod(int a, int b, int c) {
try {
if (a > 11 || a < 0 || b > 15 || b < 0 || c < 0) {
throw std::invalid_argument("Invalid Argument");
}
} catch (std::invalid_argument const& value) {
std::cerr << "Invalid Argument " << value.what() << '\n';
}
}
Would this throw an exception?
是的,但随后您捕获了异常,因此构造函数将 return 成功。
如果你的目标是抛出构造函数,那么不要在构造函数中捕获异常。
How would I implement the exception handler?
您将在要处理异常的范围内实现异常处理程序。您无法在要抛出异常的范围内处理异常。
How would I implement the exception handler?
通过不在抛出的构造函数中实现它。在试图将无效输入传递给构造函数的代码中实现它,例如:
Mod(int a, int b, int c){
if (a > 11 || a < 0 || b > 15 || b < 0 || c < 0 ) {
throw std::invalid_argument("Invalid Argument");
}
}
try {
Mod m(1, 2, -1);
// use m as needed...
}
catch (std::invalid_argument const& value) {
std::cerr << "Invalid Argument " << value.what() << '\n';
}
Would this throw an exception? If the values entered were out of bound?
是的,确实如此,但是它会立即捕获并丢弃异常,因此调用者永远不会看到它。它也可能从未被抛出。
我正在尝试创建一个构造函数来验证输入并在输入无效时抛出异常。
假设我有一个构造函数,它只接受 mod 12 中的值作为 int a,mod16 的值作为 b,以及大于 0 的值作为 c。我正在尝试使用 std::invalid_argument
。我将如何实现异常处理程序?这会抛出异常吗?如果输入的值超出范围?
Mod(int a, int b, int c) {
try {
if (a > 11 || a < 0 || b > 15 || b < 0 || c < 0) {
throw std::invalid_argument("Invalid Argument");
}
} catch (std::invalid_argument const& value) {
std::cerr << "Invalid Argument " << value.what() << '\n';
}
}
Would this throw an exception?
是的,但随后您捕获了异常,因此构造函数将 return 成功。
如果你的目标是抛出构造函数,那么不要在构造函数中捕获异常。
How would I implement the exception handler?
您将在要处理异常的范围内实现异常处理程序。您无法在要抛出异常的范围内处理异常。
How would I implement the exception handler?
通过不在抛出的构造函数中实现它。在试图将无效输入传递给构造函数的代码中实现它,例如:
Mod(int a, int b, int c){
if (a > 11 || a < 0 || b > 15 || b < 0 || c < 0 ) {
throw std::invalid_argument("Invalid Argument");
}
}
try {
Mod m(1, 2, -1);
// use m as needed...
}
catch (std::invalid_argument const& value) {
std::cerr << "Invalid Argument " << value.what() << '\n';
}
Would this throw an exception? If the values entered were out of bound?
是的,确实如此,但是它会立即捕获并丢弃异常,因此调用者永远不会看到它。它也可能从未被抛出。