04_编译阶段能做什么 属性和静态断言

今天的课程听不懂,哭#

01-编译阶段编程

02-属性(attribute)

​ 在 C++14 中 增加了一个比较实用的属性 “deprecated” ,用来标记不推荐使用的变量、函数或者类,也就是被“废弃”。

​ 比如说,你原来写了一个函数 old_func() ,后来觉得不够好,就另外重写了一个完全不同的新函数。但是,那个老函数已经发布出去被不少人用了,立即删除不太可能,该怎么办呢?这个时候,你就可以让“属性”发挥威力了。你可以给函数加上一个“deprecated”的编译期标签,再加上一些说明文字:

[[deprecated("deadline:2020-12-31")]]      // C++14 or later
int old_func();

​ 于是,任何用到这个函数的程序都会在编译时看到这个标签,报出一条警告

warning: ‘int old_func()’ is deprecated: deadline:2020-12-31 [-Wdeprecated-declarations]

03- 静态断言(static_assert)

04- 小结

​ “属性”相当于编译阶段的“标签”,用来标记变量、函数或者类,让编译器发出或者不发出警告,还能够手工指定代码的优化方式。

​ 官方属性很少,常用的只有“deprecated”。我们也可以使用非官方的属性,需要加上名字空间限定。

​ static_assert 是“静态断言”,在编译阶段计算常数和类型,如果断言失败就会导致编译错误。它也是迈向模板元编程的第一步。

​ 和运行阶段的“动态断言”一样,static_assert 可以在编译阶段定义各种前置条件,充分利用 C++ 静态类型语言的优势,让编译器执行各种检查,避免把隐患带到运行阶段。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值