• 忘掉天地
  • 仿佛也想不起自己
  • 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2019-12-22 08:21 Aet 隐藏边栏 |   抢沙发  11 
文章评分 4 次,平均分 5.0

静态断言

相关介绍:

  1. 预处理宏assert()在标准库头文件cassert中定义。

    1. 它可以在程序中测试逻辑表达式。
  2. 只要条件(表达式)是falseassert()宏就会调用std::abort(),终止程序。

  3. 另外assert()会在标准错误流cerr中显示结果。

    静态断言

  4. 静态断言是C++语言的一部分,与assert宏是不一样的。

    1. 换句话就是静态断言是C++语言的内置部分,而不是标准库增加的功能。
  5. assert宏用于在运行时动态检查条件,而静态断言则是在编译时静态检查条件的。

  6. 静态断言是一个关键字,而条件表达式必须在编译期间生成一个可转换为boo类型的结果。

  7. 上面第二个语法,constant_expressionfalse时,编译失败,编译器将终止编译,并且输出一条包括了error_message的诊断消息。

    1. C++17新增的特性,就是在静态断言中省略error_message字符串字面量。
    2. 对于这一点,没有指定error_message的情况,编译器将会生成一个error_message,这个生成的error_message,通常都是基于constant_expression生成的。
    3. 当然,当constant_expressiontrue时,静态断言什么也不做。(为false时,才需要用到error_message,才会生成)

    静态断言的另一个功能

  8. 在模板定义中验证模板参数的特征。

  9. 代码解析:

    1. is_arithmetic<T>是一种所谓的类型特征。该类型特征有一个value成员,可以通过is_arithmetic<T>::value进行访问,如果T是算术类型(任意浮点或整数类型)其值为true,否则为false
    2. C++17开始,is_arithmetic<T>::value,还可以写为is_arithmetic_v<T>::value

静态成员变量

  1. 把类的成员变量申明为static时,静态成员变量就只定义一次。
    1. 而且,即使没有为类创建对象实例,静态成员变量也依然存在。
  2. C++17开始,支持内联静态成员变量。

静态常量

  1. C++17之前,决定什么时候能够或者不能够在类定义中直接初始化静态常量成员的规则是比较复杂的。(比如一些静态常量可以在类中定义,而其他静态常量却需要在对应的源文件中定义。)
  2. C++17中,新引入的内联变量让初始化静态常量的工作变简单了

关于运算符的相关限制

  1. 虽然运算符重载很灵活、很强大,但是也存在一些限制。运算符重载,只能重载现有的运算符。 那么,这一点也就意味着:
    1. 不能发明新的运算符
    2. 不能修改现有运算符的操作数个数、相关性和优先级,同时,也不能修改运算符的操作数的计算顺序。
    3. 一般来说,不能重写内置的运算符,并且重载运算符的签名必须涉及至少一种类类型。
  2. 上述关于运算符的限制描述中,标蓝字的部分是C++17对运算符重载的新加限制
    1. C++17之前,编译器可自由选择按照什么顺序来计算重载运算符的操作数
    2. 但是C++17中,重载运算符操作数与对应的内置运算符的操作数必须遵守同样的规则

noexcept限定符相关

  1. C++17标准之前,通过在函数头中追加throw(type1,...,typeN),可指定该函数能够抛出的异常类型列表。因为这种指定方法没有效果,所以现在不再支持了。同时,C++17标准只保留了空列表的throw(),作为noexcept已被弃用的同义词。

嵌套命名空间

  1. 简化嵌套命名空间的声明

并行计算

  1. 支持并行执行的STL算法

映射

  1. 映射或关联数组容器最容易被想象为字典或电话本的一般化。

    1. 映射中的键必须唯一,但是值不一定唯一。
  2. 标准库提供了两种不同的映射容器map<Key,Value>unordered_map<Key,Value>

    1. 映射容器至少需要两个模板类型实参,一个用于决定键的类型,一个用于决定值得类型。

  3. 上面这个遍历映射的语法,是C++17新引入的。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2025-03-20
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享