断言:assert
编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设,可以将断言看作是异常处理的一种高级形式。断言表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真。可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言,而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题时可以重新启用断言。
static_assert(表达式,“输出文本”)
编译期检查,如果constexpr为假 则输出编译时错误,错误信息为字符串内容
volatile
使用 volatile 变量类型 变量名 =初始化数值;
应用场合:多线程编译
编译器进行强制 I/O 寻址,而非读取寄存器的值。
一般情况下,连续使用的变量,编译器会先把数据读出来,并且保存到寄存器里,
使用的时候,直接读取寄存器里的数据,这样处理速度会快一点,
但是,有些时候,比如实时读取按键值,或者其它要求比较实时的数据,
就不能使用寄存器了,必须要用到 volatile 关键字了
命名空间 (namespace)
使用 namespace 空间命名{ 函数表达式 }
用来解决名字长且难以理解的问题,还有重名问题
设计工具可以使用命名空间,使开发人员在他们的代码中浏览和引用类型更为方便。单个程序集可以包含其分层名称具有不同命名空间根的类型,而且逻辑命名空间根可以跨多个程序集。命名空间在逻辑设计时提供命名方便,而程序集在运行时确定类型的命名范围。
凡是全局作用域的东西都可以房子命名空间中
命名空间可以嵌套,可以拆分 可以取别名
取别名比如:namespace JJJ (前面是别名)= MJ(后面是命名空间的名字)
可以在命名空间中嵌套其他命名空间,为类型创建层次结构。
Using namespace MJ 当前作用域使用指定命名空间
凡可以声名的地方都可以放using语句using MJ::fun;
::fun;使用全局作用域的名字
注意不允许在另一个嵌套的命名空间中声明多部分的命名空间。
另外顺便提一下,命名空间也并没有解决所有问题,它只是使发生命名冲突的机会变小了许多而已。
Auto
使用 auto 变量名 = 任何表达式;
仅在语句块内部使用,初始化可为任何表达式,其特点是当执行流程进入该语句块的时候初始化可为任何表达式。
Auto不能做为函数参数来传递
Decltype
表达式不会被应用,只会被推导类型,用法为decltype(表达式) 变量名 = 初始化值;