首页 > 其他分享 >断言assert,异常,类型转换

断言assert,异常,类型转换

时间:2024-09-05 16:36:03浏览次数:5  
标签:类型转换 std 断言 val assert cast bad error 异常

  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<> 主要用于以下几种情况:

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

标签:类型转换,std,断言,val,assert,cast,bad,error,异常
From: https://www.cnblogs.com/light-LifeClub/p/18398773

相关文章

  • 强制类型转换(也称为显式类型转换)
    1.是什么             强制类型转换(也称为显式类型转换)在Java中是一种编程技术,它允许程序员将一种数据类型的变量转换为另一种数据类型的变量,即使这两种类型在Java的类型层次结构中不是直接兼容的。强制类型转换通常用于以下几种情况:1.将一个较大数据类型的......
  • mysql实用系列:字段类型转换该怎么去转
    在MySQL中,可以使用内置的函数来转换字段类型。以下是一些常用的类型转换函数:CAST(expressionAStype):用于将一个表达式转换为指定的数据类型。CONVERT(expression,type):与CAST类似,但语法略有不同以下是一些具体类型的转换示例:将字符串转换为整数:CAST(column_nameAS......
  • 【类型转换】使用c#实现简易的类型转换(Emit,Expression,反射)
    引言哈喽。大家好,好久不见,最近遇到了一个场景,就是在FrameWork的asp.netmvc中,有个系统里面使用的是EntityFramework的框架,在这个框架里,提供了一个SqlQuery的方法,这个方法很好用啊,以至于在EFCORE8里面又添加了回来,不过不知道性能怎么样,我遇到的场景是通过SqlQuery查询的......
  • 数据类型转换
    一、强制类型转换也称为显式转换1、转换为number​三种方式:1.使用Number()如果内容可以转换成数字,则返回对应的数字(整数或小数)如果内容不可以转换成数字,则返回NaN如果内容为空字符串或null,则返回0如果内容为boolean,则true返回1,false返回0(boolean值在内存中就是以数......
  • postman/apifox前置后置获取数据代码断言
    1,get请求https://www.localhost.cn/file/list?attestationType=0&keyword=%E5%9B%BE%E7%89%87&orderType=desc&pageNum=1&pageSize=20返回结果:{"data":{"total":1,"list":[{......
  • 5 Python的变量、关键字、命名规则、基本数据类型及类型转换
    本文是Python系列教程第5篇,完整系列请查看Python专栏。1定义变量在Python中定义变量非常简单,你只需要给变量赋值即可。Python会自动检测变量的数据类型。下面是一些基本的例子来展示如何定义不同类型的变量:1.1整数age=251.2浮点数height=1.751.3字......
  • sql优化-错误强制类型转换导致索引失效
    使用GaussDB数据库进行测试创建下面表,仅有一个字段a为integer类型。声明其为主键,数据库会默认为其建立索引。createtablet1(aintPRIMARYKEY);使用\d+查看表结构:gaussdb=#\d+t1Table"public.t1"Column|Type|Modifiers|......
  • C语言--类型转换
    数据的类型不同,在进行混合运算时会涉及到类型转换问题,转换的方法有哪些?一、自动转换:遵循一定的规则,由编译系统自动完成.(一)自动转换的原则:1、占用内存字节数少(取值范围小)的类型,向占用内存字节数多(取值范围大)的类型转换,目的是为了保证精度不降低.2、转换方向:3、当......
  • 利用instanceof比较类、类之间的类型转换和Static
    instanceof引用类型,类型转换判断某一个对象是不是某个类型的类的实例(有关系才能比较,否则会报错)能不能编译通过,取决于X与Y是否存在父子关系例子:父类代表高类,子类代表低类Object>Persion>TeacherObjectobject=new.Student();System.out.println(obje......
  • golang interface{} Type assertions类型断言 x.(T) 和Type switches类型选择 switch
    在golang的开发中,我们经常会用到类型断言typeassertions和switchx.(type)类型选择,他们都可以对interface{}空接口类型的数据进行类型断言,他们的功能类似但是有区别,区别如下:共同点:都可以对interface{} /any类型的数据进行数据类型的断言区别:  类型断言x.(T)......