C++ 中 std::invalid_argument 的使用示例

5星 · 超过95%的资源 2 下载量 59 浏览量 更新于2024-09-01 收藏 58KB PDF 举报
"C++ 中的 std::invalid_argument 类的应用与理解" 在 C++ 中,`std::invalid_argument` 是一个标准库异常类,用于表示函数或方法接收到的参数值不符合预期,即无效参数的情况。它是 `std::logic_error` 的子类,而 `std::logic_error` 又是 `std::exception` 的子类。这意味着 `std::invalid_argument` 继承了 `std::exception` 中的一些基本功能,如 `what()` 函数,用于返回关于异常的描述信息。 `std::invalid_argument` 的构造函数如下: ```cpp class invalid_argument : public logic_error { public: explicit invalid_argument(const string& what_arg); }; ``` 这个类需要一个字符串参数 `what_arg`,该参数通常用来描述具体哪个参数无效以及原因。 下面是一个简单的使用示例: ```cpp #include <iostream> #include <stdexcept> int main(int argc, char argv) { try { bool errorArgument = true; if (errorArgument) { throw std::invalid_argument("occur error!"); } } catch (std::invalid_argument& ia) { std::cerr << "Invalid_argument: " << ia.what() << std::endl; } return 0; } ``` 在这个例子中,当 `errorArgument` 为真时,会抛出 `std::invalid_argument` 异常,然后在 `catch` 块中捕获并打印出异常信息。 `std::invalid_argument` 通常用于参数验证。例如,假设我们有一个 `Person` 类,包含 `name`、`age` 和 `height` 三个成员变量。我们知道,一个人的年龄应该在 0 到 150 岁之间,身高在 0 到 300 厘米,名字长度不超过 20 个字符。当设置这些属性或传递给相关函数的参数超出这些范围时,就可以抛出 `std::invalid_argument` 异常,以表明输入的数据无效。 ```cpp #include <stdexcept> #include <string> class Person { public: void setName(const std::string& name) { if (name.length() > 20) { throw std::invalid_argument("Name length exceeds the limit"); } this->name = name; } void setAge(int age) { if (age < 0 || age > 150) { throw std::invalid_argument("Invalid age value"); } this->age = age; } void setHeight(double height) { if (height < 0 || height > 300) { throw std::invalid_argument("Invalid height value"); } this->height = height; } private: std::string name; int age; double height; }; ``` 在这个 `Person` 类中,每个设置方法都包含了参数检查,如果发现参数不合法,就会抛出 `std::invalid_argument` 异常,以便调用者能够捕获并处理错误。 `std::invalid_argument` 是 C++ 中用于处理参数验证错误的一种机制,它使得程序在遇到不合理输入时能够明确地报告问题,提高代码的健壮性和可维护性。在编写涉及参数检查的函数或类时,适时使用这种异常类型能够有效地提升程序的错误处理能力。