
文章插图
很明显,现在可以同时在if/switch句块内进行变量初始化和条件检查 。这有助于保持代码简洁精炼 。通用形式为:
if( init-statement(x);condition(x)) { // do some stuff here} else { // else has the scope of x // do some other stuff}
4. 在编译时使用constexpr
constexpr 很棒!假如要评估一些表达式,且它的值一旦初始化就不会改变,那么可以预运算其值并将之作为宏 。或者利用C++11提供的constexpr.
程序员倾向于尽量减少程序运行时间 。所以,如果能让编译器进行一些操作并减小程序运行的压力,那么就可以缩短运行时间 。

文章插图
以上代码是constexpr的常见例子之一 。既然声明斐波那契数列函数为constexpr,那么编译器就可以在编译时预运算fib(20). 所以编译之后,可以用constlong long bigval = 2432902008176640000来替代const longlong bigval = fib(20).
请注意,传递参数是一个const 值 。这是被声明为constexpr的函数的一个重点——传递参数应该是constexpr或const 。否则这里的函数会和普通函数一样,也就是说编译时不进行预运算 。
变量也可以是constexpr. 在这种情况下,这些变量在编译时必须可评估;否则会出现编译错误 。
有趣的是,后来在C++17中引入了constexpr-if 和constexpr-lambda.
5. Tuples元组
与pair非常类似, tuple是各种数据类型的固定大小值的集合 。

文章插图
有时,相比于tuple,使用 std::array更方便 。array类似于带有C++标准库的功能的plain C阵列 。这个数据结构是C++11新增的 。
6. 类模板参数推导
这个特性的名字还挺啰嗦 。从C++17开始,标准类模板也可以进行模板参数推导 。之前,模板参数推导只支持函数模板 。结果就是:
std::pair<std::string,int> user = {"M", 25}; // previousstd::pair user = {"M", 25}; // C++17
这种推导是“隐性的” 。这对于tuple来说就更方便了 。
// previousstd::tuple<std::string, std::string, int> user ("M","Chy", 25);// deduction in action! std::tuple user2("M", "Chy", 25);
以上这一特性对不熟悉C++模板的人来说没有太大用处 。
7. 智能指针
指针有时很恐怖 。由于C++语言为程序员提供了很大程度的自由,所以有时很容易搬起石头砸自己的脚 。而且很多情况下,麻烦是由指针造成的 。
幸运的是,C++11引入了智能指针,智能指针比普通指针便捷得多 。它们通过适时释放内存来帮助程序员防止内存泄漏 。它们还有助于代码达到异常安全等级 。
C++为最新版本的计算机语言引入了许多全新的特性 。如果你感兴趣,可以进行深入了解 。
【C++这七大特性】
推荐阅读
- 中秋节这天为什么要吃月饼呢 中秋节后超市月饼怎么处理
- 针灸减肥有奇效开始之前需要了解这6点
- 男女针灸戳身体这处缓解压力还补肾
- 梅花针治疗疾病帮助大这些人不能用梅花针
- 注意!梅花针这样敲可以美容
- 如何做汤圆
- 原来用热水敷眼睛有这么多作用
- 历史上真有苏麻喇姑这个人吗 苏麻喇姑为什么地位那么高
- 凉茶是药不是茶 这几类人不宜多喝
- 你知道这些独特的饮茶习俗吗
