断言assert,异常,类型转换

  1. assert
    作用:等同于Qdebug(val),判断程序是否得到自己想要的结果
    可以通过#definde NDEBUG 一键屏蔽

接受一个条件表达式作为参数。如果该条件表达式的值为假(即为0或者布尔意义上的false),则assert会触发一个错误,通常会导致程序终止,并打印出错误信息和发生错误的位置

#include <iostream>
#define NDEBUG
#include <cassert>

int main()
{
    int val = 12;
    assert(val == 13);
    std::cout << "val!=13" <<std::endl;

    std::cout << "Hello World!\n";
    system("pause");
}

头文件cassert

错误信息:Assertion failed: val == 13, file C:\Users\admin\source\repos\ConsoleApplication4\ConsoleApplication4.cpp, line 11

b) 可以通过#definde NDEBUG 一键屏蔽断言

2)异常及异常处理

常见异常类型:

基础异常类型
std::exception
这是所有标准异常类的基类,定义了基本的行为。所有标准异常都应该继承自这个类。
定义了一个虚函数 what(),返回一个描述异常原因的字符串。
标准异常类型
std::logic_error
表示程序逻辑错误,即不应该发生的错误。
包括以下子类:
std::domain_error:表示函数域错误,例如数学函数的非法参数。
std::invalid_argument:表示函数接收到无效参数。
std::length_error:表示试图创建超出容器容量的元素数量。
std::out_of_range:表示索引或键值超出了合法范围。

std::runtime_error
表示运行时错误,即在运行时发生的错误。
包括以下子类:
std::range_error:表示数值运算错误,例如溢出。
std::overflow_error:表示算术运算结果超出最大值。
std::underflow_error:表示算术运算结果小于最小值。
std::bad_typeid:表示类型信息错误。

std::bad_alloc
表示内存分配失败。
不继承自 std::exception,而是直接继承自 std::terminate_handler。

std::bad_cast
表示动态类型转换失败,通常发生在 dynamic_cast 失败时。
std::bad_exception
表示在异常处理过程中找不到合适的异常处理函数。
std::bad_function_call
表示对未绑定的函数对象的调用。
std::bad_weak_ptr
表示使用了已失效的弱智能指针。
std::nested_exception
提供了嵌套异常的支持,允许在一个异常中包装另一个异常。
其他相关类型
std::system_error
表示由操作系统产生的错误,通常包含了错误代码和错误类别。
包括 std::error_code 和 std::error_category 类型。
std::future_error
表示与 std::future 和 std::promise 相关的错误。
std::bad_variant_access
表示对 std::variant 的不适当访问。

例子:


#include <iostream>
#include <exception>
#include <cassert>

int main()
{
    try
    {
        int val = 13;
        //assert(val == 13);
        if (val != 12)
            throw(std::exception("badval"));



        std::cout << "val!=13" << std::endl;
    }
    catch (const std::exception& ex)
    {
        std::cout << ex.what();
    }

    //int val = 12;
    ////assert(val == 13);
    //std::cout << "val!=13" <<std::endl;

    std::cout << "Hello World!\n";
    system("pause");
}

3)noexcept 申明不跑出异常

void fun() noexcept

4)类型转换

static_cast<>:用于类型安全的转换,如从派生类到基类的转换。
const_cast<>:用于去除或添加常量性。
dynamic_cast<>:用于多态类之间的类型转换,并进行类型检查。

reinterpret_cast<> 强转
reinterpret_cast<> 主要用于以下几种情况:

指针类型之间的转换:可以将一种类型的指针转换为另一种类型的指针。
指针与整数之间的转换:可以将指针转换为整数,或将整数转换为指针。
枚举类型与整数之间的转换:可以将枚举类型转换为整数类型,反之亦然

posted on   不败剑坤  阅读(19)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 三行代码完成国际化适配,妙~啊~
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示