今天的课程听不懂,哭#
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++ 静态类型语言的优势,让编译器执行各种检查,避免把隐患带到运行阶段。