首页 > 编程语言 >C++语法——noexcept 关键字

C++语法——noexcept 关键字

时间:2023-11-05 17:34:17浏览次数:32  
标签:抛出 noexcept BasicPageGuard C++ 关键字 移动 异常 构造函数


noexcept


问题

在数据库项目 CMU15445 中的 Project #2 中,有以下一个构造函数的实现:

BasicPageGuard(BasicPageGuard &&that) noexcept;

这里为什么选择加 noexcept

解释

关键字 noexcept 在C++中用来指定一个函数不会抛出异常。在函数声明后使用 noexcept 表明该函数保证不会抛出任何异常,这允许编译器进行某些优化,因为它知道不需要在这个函数中处理异常。

对于 BasicPageGuard(BasicPageGuard &&that) noexcept; 这个移动构造函数来说,使用 noexcept 指定了在移动 BasicPageGuard 对象时,这个操作是不会抛出异常的。如果一个操作被标记为 noexcept,但实际上在运行时抛出了异常,程序将会调用 std::terminate,这通常会导致程序立即终止。

在移动语义中使用 noexcept 是非常有用的,尤其是在涉及到对象容器,如 std::vector 这类需要重新分配内存并移动其元素的场景。如果移动构造函数被标记为 noexcept,标准库容器可以安全地进行优化,选择移动元素而不是复制,因为它们知道移动操作不会抛出异常。这通常会导致更高效的代码。

标签:抛出,noexcept,BasicPageGuard,C++,关键字,移动,异常,构造函数
From: https://www.cnblogs.com/vLiion/p/17810594.html

相关文章

  • C++11语法——std::move()
    std::move()在C++中,std::move()用于将对象转换为右值引用。关于左值、左值引用、右值、右值引用左值是一个表示数据的表达式(比如变量名或者解引用的指针),程序可以获取其地址传统的C++引用,即是左值引用。C++11新增右值引用,用&&表示。右值是可出现在赋值表达式的右边,但不......
  • SATA基础+更改终端颜色+PCI.ids位置+Linux和Windows的scanf+C语言C++的局部变量与全局
    SATA基础https://zhuanlan.zhihu.com/p/554251608物理信号物理层功能时钟恢复:对于高频传输,一般是采用差分信号传输,并且没有单独的时钟,时钟存在于编码内部串并转换:对于高频传输,串联信号可以做到更高的频率。字节对其:8/10编码转换的10bit对其链路层、传输层链路层和传输......
  • 漫谈 C++:良好的编程习惯与编程要点
    以良好的方式编写C++class假设现在我们要实现一个复数类complex,在类的实现过程中探索良好的编程习惯。①Header(头文件)中的防卫式声明complex.h:#ifndef__COMPLEX__#define__COMPLEX__classcomplex{}#endif防止头文件的内容被多次包含。②把数据放在priva......
  • C++对象模型
    思考:对于实现平面一个点的参数化。C++的class封装看起来比C的struct更加的复杂,是否意味着产生更多的开销呢?实际上并没有,类的封装不会产生额外的开销,其实,C++中在布局以及存取上的额外开销是virtual引起的。C++对象模式在C++中,有两种classdatamembers:静态成员和非静态成员。有......
  • c++实现排序算法
    排序算法选择排序#include<iostream>#include<cmath>usingnamespacestd;intmain(){ intn,i,j,a[2000]; boolt; cin>>n; for(i=1;i<=n;i++) cin>>a[i]; for(i=1;i<n;i++) for(j=i+1;j<=n;j++) if......
  • Windows系统 C/C++程序编译后首次执行时间很长 断网则正常执行 的解决方法
    Windows系统C/C++程序编译后首次执行时间很长断网则正常执行的解决方法问题描述运行环境:Win10、Win11或其他Win环境。在各类IDE(包括但不限于VC6/VisualStuido等)编译任意C/C++源码(无论该程序有多简单),首次运行时间异常地长,即在黑窗口无任何输出。等待一段时间后有程序正......
  • C++prime之输入输出文件
    作为一种优秀的语言,C++必然是能操作文件的,但是我们要知道,C++是不直接处理输入输出的,而是通过一族定义在标准库中的类型来处理IO的。‘流’和‘缓冲区’‘流’和‘缓冲区’C++程序把输入输出看作字节流,并且其只检查字节流,不需知道字节来自何方。管理输入包括两步:将流与输入去......
  • 与c++比较学习rust3-2:数据类型
    rust的文章在数据类型数据类型标量类型整形,浮点型,布尔型,字符整形c++rustgoint8_ti8int8int16_ti16int16int32_ti32int32int64_ti64int64-i128-intisizeintunsignedintusizeuintuint8_tu8uint8uint16_tu16uint16ui......
  • 同余方程(扩展欧几里得)(C/C++)
    ax%b=1,则a和b的最大公约数一定是1。#include<cstdio>#include<iostream>usingnamespacestd;inta,q;intx,y;voidexgcd(inta,intb){ if(b==0) { x=1; y=0; return;//得到gcd(b,0)时到达边界值 }// else { exgcd(b,a%b); intk=x; x=y; y=k-......
  • 【UEC++游戏案例】向上的小松饼
    一.效果与资源准备1.1游戏演示效果效果:00-课程演示_哔哩哔哩_bilibili  1.2游戏资产素材与源码素材与源码:提示信息-SiKi学院|SiKi学堂-unity|u3d|虚幻|ue4/5|java|python|人工智能|视频教程|在线课程  1.3前期准备创建无初学者内容的空项目将素材文......