C++11新特性介绍(三)

前言

该篇文章讲述C++11新特性中

①static_assert

②noexcept修饰符

③强类型枚举

④using类型的别名

static_assert

//语法
static_assert("常量表达式","提示的字符串");

静态断言,在C++11以前,C/C++提供了一种调试工具:assert断言,这是一个宏,用于在运行阶段对断言进行检查,assert(flag == true)如果条件为真,程序执行,否则调用abort()(程序将直接退出,并发出sigabrt消息)

C++11新增关键字static_assert,用于在编译阶段对断言进行测试

static_assert相较于assert的优势:

①更早的报告错误,我们知道构建是早于运行的,更早的报告错误以为着开发成本的降低

②减少运行时的开销,静态断言是编译时检测的,减少了运行时的开销

static_assert的第一个参数必须是常量表达式,不能是变量,因为是在编译阶段进行测试,变量还不存在,C++11之前的assert断言测试可以是变量,因为是在运行阶段测试 

noexcept修饰符

C++11之前,如果我们想抛出一个异常或者限制抛出异常,那么可以

void func()
{
  throw 1; //抛出一个异常
}
void func1() throw() //代表此函数不能抛出异常,如果抛出,就会异常
{
  throw 1; 
}

C++11用noexcept代替throw(),所以代码可以改写成

void func1() noexcept //代表此函数不能抛出异常,如果抛出,就会异常
{
  throw 1; 
}

强类型枚举

C++11之前,我们平常用的枚举类型可以是这样的,定义一个枚举类型FUNC

enum FUNC{OK,error}; //正确

但如果再定义一个枚举类型FUNC1,如下代码图,就会报错,错误提示为OK的重定义,因为这两枚举的作用域是相同的,编译器分不清楚OK到底是FUNC的还是FUNC1的

enum FUNC{OK,error}; 
enum FUNC1{OK,pause};//错误,OK的重定义
int main()
{ 
  FUNC Y = OK; //OK赋值失败,OK的重定义
  FUNC N = error;
}

为了解决这个问题,C++11出现强类型枚举,将枚举的作用域变为类,语法格式为

enum class/struct 枚举名{};
enum class FUNC{OK,error}; //强枚举类型
enum struct FUNC1{OK,pause};//强枚举类型
int main()
{ 
  FUNC Y = FUNC::OK; //正确,类名::表明是FUNC的OK
  FUNC N = FUNC::error;
}

这样就不会出现枚举重定义的错误,因为每个枚举的作用域都是类,但使用枚举量的时候,必须限定作用域,以表明是哪个枚举类的枚举量

强类型枚举可以指定成员变量的的类型

enum class FUNC:char{OK,error};//指定枚举为char类型

不指定则默认为int类型

using类型的别名

C++11之前可以通过 typedef给一个类型起别名,给int类型起了别名为int32

typedef int int32;

C++11使用using关键字给类型起别名

using int32 = int;

 这篇文章对你有帮助的话~就点个赞吧~

点赞收藏关注就是对我最大的支持~

一起学习C++11新特性~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值