- 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<> 主要用于以下几种情况:
指针类型之间的转换:可以将一种类型的指针转换为另一种类型的指针。
指针与整数之间的转换:可以将指针转换为整数,或将整数转换为指针。
枚举类型与整数之间的转换:可以将枚举类型转换为整数类型,反之亦然