首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C++的异常处理 try-catch-throw

    std::out_of_range:当使用容器或数组时,如果索引超出范围,就会抛出该异常。 std::invalid_argument:当传递了无效的参数时,会抛出该异常。...."); ③异常捕获(Catching Exceptions) 使用try-catch语句块来捕获并处理异常。try块中包含可能会引发异常的代码,而catch块则用于处理捕获到的异常。...④异常传播(Exception Propagation) 当一个异常在函数内部引发但未被捕获时,它将传播到调用该函数的地方。如果没有在调用堆栈中的任何函数中处理该异常,程序将终止并显示异常消息。...也就是说,应该首先捕获最具体的异常,然后再逐渐向上捕获更一般的异常。 ⑥异常声明(Exception Specifications) C++11之前,可以使用异常声明来指定函数可能抛出的异常类型。...try { // 可能引发异常的代码 } catch (const std::exception& e) { std::cout << "Exception caught: " << e.what

    41220

    C++ 异常处理

    这是通过使用 throw 关键字来完成的。 catch: 在您想要处理问题的地方,通过异常处理程序捕获异常。catch 关键字用于捕获异常。 try: try 块中的代码标识将被激活的特定异常。...如果有一个块抛出一个异常,捕获异常的方法会使用 try 和 catch 关键字。try 块中放置可能抛出异常的代码,try 块中的代码被称为保护代码。...; } return (a/b); } 捕获异常 catch 块跟在 try 块后面,用于捕获异常。您可以指定想要捕捉的异常类型,这是由 catch 关键字后的括号内的异常声明决定的。...std::out_of_range 该异常可以通过方法抛出,例如 std::vector 和 std::bitset::operator[]()。...std::out_of_range 该异常可以通过方法抛出,例如 std::vector 和 std::bitset::operator[]()。

    1.1K10

    【C++航海王:追寻罗杰的编程之路】异常——错误处理方式之一

    e2) { // catch 块 } catch (ExceptionName e3) { // catch 块 } 3 -> 异常的使用 3.1 -> 异常的抛出和捕获 异常的抛出和匹配原则 异常是通过抛出对象而引发的...(类似函数的传值返回) catch()可以捕获任意类型的异常,问题是不知道异常错误是什么。 实际中抛出和捕获的匹配原则有个例外,并不都是类型完全匹配,可以抛出的派生类对象,使用基类捕获。...没有匹配的catch则退出当前函数栈,继续在调用函数的栈中进行查找匹配的catch。 如果达到main函数的栈,依旧没有匹配的,则终止程序。这个沿着调用链查找匹配的catch子句的过程称为栈展开。...std::string时,会抛出该异常 std::out_of_range 该异常可以通过方法抛出,例如std::vector和std::bitset::operator[]() std::runtime_error...C++没有垃圾回收机制,资源需要自己管理。有了异常非常容易导致内存泄漏、死锁等异常安全问题。这个需要使用RAII来处理资源的管理问题。学习成本较高。

    8710

    Cpp(六) 异常处理Exception

    异常类型 描述 std::exception 所有的异常 std::bad_alloc new异常 std::bad_cast dynamic_cast异常 std::bad_exception 无法预期的异常...std::bad_typeid typeid异常 std::logic_error 读取代码来检测到的异常 std::domain_error 使用了一个无效的数学域时,会抛出该异常 std::invalid_argument...使用了无效的参数时,会抛出该异常 std::length_error 创建了太长的 std::string 时,会抛出该异常 std::out_of_range 通过方法抛出,例如 std::vector...和 std::bitset::operator std::runtime_error 理论上不可以通过读取代码来检测到的异常 std::overflow_error 发生数学上溢时,会抛出该异常...主动抛出自定义异常 } catch (logic_error e) { cout<<e.what()<<endl; }catch (MyException& e) { // 捕获自定义异常

    91940

    string 性能优化之存储:栈或者堆

    直接分配 大概在08年的时候,手动实现过string,没有考虑性能,所以单纯是从功能的角度进行实现,下面摘抄了部分代码,如下: string::string(const char* s) { size...这样做的优点是实现简单,而缺点呢,因为每次都在堆上进行分配,而堆上内存的分配效率非常差(当然是相对栈来说的),所以有没有更好的实现方式呢?下面我们看先STL中的基本实现。...那么string有没有类似Redis整数集合的功能,进行类型升级呢?...• _M_local_buf这是一个用以实现SSO功能的字段,大小为16(15 + 1其中1为结束符)个字节 • _M_allocated_capacity是一种size_t类型,功能类似于vector...,下面结合GDB一起再分析下SSO的实现机制,示例代码如下: #include int main() { std::string str("hello"); return 0

    65020

    C++ 异常处理《Rice C++ 学习开发》

    catch:捕获程序的异常。 try:try 块中的代码标识将被激活的特定异常,通常跟着一个或多个catch 块。 异常捕获: 当程序抛出异常时,使用try和catch捕获异常。...try块中放置可能出现异常的代码,其代码也称为保护代码,catch块中放置捕获带异常后的处理方法。...std::logic_error理论上可以通过读取代码来检测到的异常。std::domain_error当使用了一个无效的数学域时,会抛出该异常。...std::invalid_argument当使用了无效的参数时,会抛出该异常。std::length_error当创建了太长的 std::string 时,会抛出该异常。...std::out_of_range该异常可以通过方法抛出,例如 std::vector 和 std::bitset::operator[]()。

    66220

    C++ 异常处理简介

    这是通过使用 throw 关键字来完成的。 catch: 在您想要处理问题的地方,通过异常处理程序捕获异常。catch 关键字用于捕获异常。 try: try 块中的代码标识将被激活的特定异常。...如果有一个块抛出一个异常,捕获异常的方法会使用 try 和 catch 关键字。try 块中放置可能抛出异常的代码,try 块中的代码被称为保护代码。...catch 语句,用于捕获不同类型的异常。...; } return (a/b); } 捕获异常 catch 块跟在 try 块后面,用于捕获异常。您可以指定想要捕捉的异常类型,这是由 catch 关键字后的括号内的异常声明决定的。...std::out_of_range 该异常可以通过方法抛出,例如 std::vector std::runtime_error 理论上不可以通过读取代码来检测到的异常。

    75220

    29.C++- 异常处理

    1; //由int型的catch语句捕获 throw 1.5; //由double型的catch语句捕获 throw 1.5f; //由float型的catch语句捕获 throw...由string型的catch语句捕获 cath(...)语句,表示捕获前面所有没被定义的异常,且只能放在所有catch语句的末尾,比如:     try     { throw...<<endl;     } 运行打印: cath(...) throw抛出的异常必须被catch处理 如果throw抛出的异常,在当前函数没有catch语句能捕获,则会返回到上一级函数里再寻找catch...在catch语句块中可以将捕获的异常重新抛出 catch抛出的异常,则需要通过外层的try...catch...捕获 如果是catch(...)语句,则直接填throw;即可,编译器会自动将捕获的异常重新抛出...如果catch中抛出的类型是类的情况 需要将捕获子类异常的catch放在上部 将捕获父类异常的cath放在下部, 避免子类异常当做父类异常来使用.

    81060

    C++(STL):20---deque容器访问元素

    和 array、vector 容器一样,deque可以采用普通数组访问存储元素的方式,访问 deque 容器中的元素,比如: #include #include ...不仅如此,at() 成员函数会自行判定访问位置是否越界,如果越界则抛出std::out_of_range异常。...(10) << endl; return 0; } 运行结果为: 2 5 读者可能有这样一个疑问,即为什么 deque 容器在重载 [] 运算符时,没有实现边界检查的功能呢?...除此之外,deque 容器还提供了 2 个成员函数,即 front() 和 back(),它们分别返回 vector 容器中第一个和最后一个元素的引用,通过利用它们的返回值,可以访问(甚至修改)容器中的首尾元素...; } 运行结果为: deque 首元素为:1 deque 尾元素为:5 deque 新的首元素为:10 deque 新的尾元素为:20 注意,和 vector 容器不同,deque 容器没有提供 data

    65820
    领券