常用的c++新特性-->day03

server/2024/11/14 4:39:19/

断言和异常

  • 断言
    • 断言的基本使用
  • 静态断言
    • 静态断言的基本使用
  • 异常
    • 异常基本使用
    • c++98异常案例
  • noexcept
    • noexcept简单案例

断言

断言的基本使用

#include <iostream>
#include <cassert>// >>>>>>>>>>>>>>>> 断言的头文件
using namespace std;char* createArray(int size)
{// 通过断言判断数组大小是否大于0assert(size > 0);	// 必须大于0, 否则程序中断char* array = new char[size];return array;
}int main()
{char* buf = createArray(0);delete []buf;return 0;
}

在这里插入图片描述
这个断言是在程序执行起来才会进行判定,而静态断言是编译期间的断言

静态断言

静态断言(static_assert),静态就是在编译时就能够进行检查的断言,使用时不需要引用头文件。静态断言的另一个好处是,可以自定义违反断言时的错误提示信息。静态断言使用起来非常简单,它接收两个参数:
参数1:断言表达式,这个表达式通常需要返回一个 bool值
参数2:警告信息,它通常就是一段字符串,在违反断言(表达式为false)时提示该信息

静态断言的基本使用

// assert.cpp
#include <iostream>                                         
using namespace std;int main()
{static_assert(sizeof(long) == 4, "错误, 不是32位平台...");cout << "64bit Linux 指针大小: " << sizeof(char*) << endl;cout << "64bit Linux long 大小: " << sizeof(long) <<endl;return 0;
}

在这里插入图片描述

// assert.cpp
#include <iostream>                                         
using namespace std;int main()
{static_assert(sizeof(long) == 8, "错误, 不是32位平台...");cout << "64bit Linux 指针大小: " << sizeof(char*) << endl;cout << "64bit Linux long 大小: " << sizeof(long) <<endl;return 0;
}

在这里插入图片描述

异常

异常基本使用

#include <iostream>
using namespace std;double division(int a, int b)
{if (b == 0){throw "Division by zero condition!";}return (a / b);
}int main()
{int x = 50;int y = 0;double z = 0;try {z = division(x, y);cout << z << endl;}catch (const char* msg) {cerr << msg << endl;}return 0;
}

在这里插入图片描述

#include <iostream>
using namespace std;double division(int a, int b)
{if (b == 0){throw "Division by zero condition!";}return (a / b);
}int main()
{int x = 50;int y = 1;double z = 0;try {z = division(x, y);cout << z << endl;}catch (const char* msg) {cerr << msg << endl;}return 0;
}

在这里插入图片描述

c++98异常案例

#include<iostream>
#include<string>
using namespace std;
struct MyException
{MyException(string s) :msg(s) {}string msg;
};double divisionMethod(int a, int b) throw(MyException, int)// >>>>>>>>> 指定只能抛出这两种类型异常MyException 或者是 int
{// >>>>>>>> 如果throw() >>>>>>>> 指的是当前函数不允许抛出异常//不写就指任意类型if (b == 0){throw MyException("division by zero!!!");// throw 100;}return a / b;
}int main()
{try{double v = divisionMethod(100, 0);cout << "value: " << v << endl;}catch (int e){cout << "catch except: " << e << endl;}catch (MyException e){cout << "catch except: " << e.msg << endl;}return 0;
}

noexcept

c++11引入了noexcept

noexcept简单案例

#include<iostream>
#include<string>
using namespace std;
struct MyException
{MyException(string s) :msg(s) {}string msg;
};
//不加的话就是抛出异常 加了就是不抛出异常
double divisionMethod(int a, int b) noexcept//>>>>>>>>>>>不抛出异常
{if (b == 0){throw MyException("division by zero!!!");// throw 100;}return a / b;
}int main()
{try{double v = divisionMethod(100, 0);cout << "value: " << v << endl;}catch (int e){cout << "catch except: " << e << endl;}catch (MyException e){cout << "catch except: " << e.msg << endl;}return 0;
}

double divisionMethod(int a, int b) noexcept(常量表达式);
常量表达式的结果会被转换成一个bool类型的值:
值为 true,表示函数不会抛出异常
值为 false,表示有可能抛出异常这里
不带常量表达式的noexcept相当于声明了noexcept(true),即不会抛出异常。


http://www.ppmy.cn/server/141759.html

相关文章

微信小程序_小程序视图与逻辑_day3

一、目标 A. 能够知道如何实现页面之间的导航跳转 B. 能够知道如何实现下拉刷新效果 C. 能够知道如何实现上拉加载更多效果 D. 能够知道小程序中常用的生命周期 二、目录 A. 页面导航 B. 页面事件 C. 生命周期 D. WXS脚本 E. 案例-本地生活&#xff08;列表页面&#xff09;…

【C++课程学习】:string的模拟实现

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;C课程学习 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 一.string的主体框架&#xff1a; 二.string的分析&#xff1a; &#x1f354;构造函数和析构函数&a…

Android 下内联汇编,Android Studio 汇编开发

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ 内联汇编 Android 内联汇编非常适用于 ARM 架构的性能优化和底层操作&#xff0c;通常用于加密、解密、特定指令优化等领域。 1. 基础语法 内联汇编在 C/C …

【C++】list 与 string 基础与实现字符串操作

【C】使用 list 与 string 实现基础字符串操作 文章目录 一、字符串的基础操作1.1 - startsWith1.2 - endsWith1.3 - trim1.4 - indexOf1.5 - replaceAll 二、list 基础操作2.1 - 遍历2.1.1 - 使用迭代器访问2.1.2 - 使用基于范围的 for 循环遍历2.1.3 - 使用标准算法库遍历 2.…

记录no.26

#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h>; 函数递归 //void print(int a) //{ // if (a > 9) // { // print(a / 10);//这里开始递归 // } // printf("%d ", a % 10); //} //int main() //{ // int a 0; // scanf…

lua入门教程:pairs

pairs 的基本用法 pairs 函数返回一个迭代器&#xff0c;该迭代器可以在循环中使用&#xff0c;以访问表中的每个键值对。下面是一个简单的例子&#xff1a; local table {name "John",age 30,city "New York" }for key, value in pairs(table) dopr…

4. 查看并更新langgraph节点

导入必要的库和设置工具 首先&#xff0c;我们需要导入一些必要的库&#xff0c;并设置我们的工具。这些工具将用于在Spotify和Apple Music上播放歌曲。 from langchain_openai import ChatOpenAI from langchain_core.tools import tool from langgraph.graph import Messag…

外星人入侵

学习于Python编程从入门到实践&#xff08;Eric Matthes 著&#xff09; 整体目录&#xff1a;外星人入侵文件夹是打包后的不必在意 图片和音效都是网上下载的 音效下载网站&#xff1a;Free 游戏爆击中 Sound Effects Download - Pixabay 运行效果&#xff1a;可以上下左右移…