C++ 14 新特性总结

转载自: http://www.codeceo.com/article/cpp-14-new-features.html

C++14 这一继C++11 之后的新的 C++ 标准已经被正式批准,正在向 ISO 提交,将于年内发布。C++之父 Bjarne Stroustrup 说道,尽管与C++11 相比,C++14 的改进“有意做的比较小”,但是仍然为用户“带来了极大的方便”,是实现使C++“对新手更为友好”这一目标的步骤之一。

在 C++ 的时间表中,C++14 按计划是一个小版本,完成制定C++11 标准的剩余工作,目的是使 C++ 成为一门更清晰、更简单和更快速的语言。新的语言特性留到了未来的C++17 标准中。

C++14 的主要特性可以分为三个领域:Lambda 函数、constexpr 和类型推导。

Lambda 函数

C++14 的泛型 Lambda 使编写如下语句成为可能:

auto lambda = [](auto x, auto y) {return x + y;};

而另一方面,C++11 要求 Lambda 参数使用具体的类型声明,比如:

auto lambda = [](int x, int y) {return x + y;};

此外,新标准中的 std::move 函数可用于捕获 Lambda 表达式中的变量,这是通过移动对象而非复制或引用对象实现的:

std::unique_ptr ptr (new int (10));auto lambda = [value = std::move (ptr)] {return *value;};

constexpr

在C++11 中,使用 constexpr 声明的函数可以在编译时执行,生成一个值,用在需要常量表达式的地方,比如作为初始化模板的整形参数。C++11 的 constexpr 函数只能包含一个表达式,C++14 放松了这些限制,支持诸如 if 和 switch 等条件语句,支持循环,其中包括基于区间(range)的 for 循环。

类型推导

C++11 仅支持 Lambda 函数的类型推导,C++14 对其加以扩展,支持所有函数的返回类型推导:

auto DeducedReturnTypeFunction ();

因为C++14 是强类型语言,有些限制需要考虑:

  • 如果一个函数的实现中有多个返回语句,这些语句一定要推导出同样的类型。
  • 返回类型推导可以用在前向声明中,但是在使用它们之前,翻译单元中必须能够得到函数定义。
  • 返回类型推导可以用在递归函数中,但是递归调用必须以至少一个返回语句作为先导,以便编译器推导出返回类型。

C++14 带来的另一个类型推导方面的改进是 decltype (auto)语法,它支持使用与 auto 同样的机制计算给定表达式的类型。auto 和 decltype 在C++11 中就已经出现了,但是它们在推导类型时使用了不同的机制,这可能会产生不同的结果。

C++14 中的其他改变包括可以声明变量模板,支持使用 0b 或 0B 前缀来声明二进制字面常量。InfoQ 已经介绍过C++14 中可能破坏C++11 程序的其他小型修改。

主流 C++ 编译器对新语言特性的支持正在有条不紊地开发:Clang“完全实现了当前草案的所有内容”;GCC 和 Visual Studio 也对C++14 的新特性提供了一些支持。

时间: 2024-10-19 13:58:17

C++ 14 新特性总结的相关文章

【C++】11&14新特性

Linux下编译: g++ main.cpp -std=c++11   g++ mian.cpp -std=c++14 弃用: 1.字符串字面值常量赋值和初始化,用 const char * 或 auto,弃用 char *. 原文地址:https://www.cnblogs.com/tomatokely/p/9383091.html

Atitit eclipse新特性总结3.1---4.4  4.5

Atititeclipse新特性总结3.1---4.4  4.5 1. Eclipse 4.4 Luna正式发布了.1 1.1. 新版本的Eclipse默认对Java8提供支持1 1.2. 内存分析器.1 1.3. Other1 2. 代号 Mars 的 Eclipse 4.5 版本发布了,2 2.1. 提升了 Java 8 的特性,3 2.2. 新 Java IDE 特性, 包括对嵌套的项目层次视图,可自定义 perspectives,并提升了文本搜索的速度.3 3. Part:: atiti

在Visual Studio 14 CTP中启用C# 6.0的新特性

今天看到Visual Studio 14 CTP版本已经发布了,支持了一些c++ 及C# 6.0的新特性,便下载下了尝鲜试了一下. C++到还好,使用C#的新特性就有点麻烦了,需要在csproj文件中加上这样一行才能使用     <LangVersion>experimental</LangVersion> 最开始我想写个VS插件来弄下.试了下找不到啥相关的API,便改写了一个小程序来转换它,使用了后还是觉得但文件太多时候很麻烦. 就干脆写了一个小程序把所有的模板中都添加了这一项,

转:关于C++14:你需要知道的新特性

关于C++14:你需要知道的新特性 遇见C++ Lambda C++14 lambda 教程 C++11 lambda表达式 C++标准库:使用 std::for_each std::generate C++“准”标准库Boost学习指南(10):Boost.Lambda

atitit.eclipse 新特性总结3.1--4.3

atitit.eclipse 新特性总结3.1--4.3 Eclipse 3.1 1 Eclipse 3.2 Java开发工具的新特性 2 1. 内容辅助(Ctrl+Space)模板 2 2. 动态地重排它的建议 2 3. Quick Fix"的功能 2 Eclipse 3.3 M1 新特性一览 5 4. Browse all references 5 5. More Java search options 6 6. Plugin deve 7 7. 别的 9 eclipse 3.4新特性 10

Prometheus 2.14.0 新特性

Prometheus 2.14.0 新特性 Prometheus 2.14.0 现在(2019.11.11)已经发布,在上个月的 2.13.0 之后又进行了一些修正和改进. 这次最大的新功能是基于 React 的新 UI,与现有 UI 大体相同.该 UI 还在持续开发中.现有的 UI 还获得了 head cardinality 统计信息.这次的更新新增了按状态进行的警报过滤. 修复了压缩后的远程写延迟,在无法发送样本时避免重新分片等多个 BUG. WAL 在启动加载时进行了优化. 新增了 /ap

Java 14 有哪些新特性?

记录为 Java 提供了一种正确实现数据类的能力,不再需要为实现数据类而编写冗长的代码.下面就来看看 Java 14 中的记录有哪些新特性. 作者 | Nathan Esquenazi 译者 | 弯月,责编 | 郭芮 以下为译文: Java 14 即将在 2020 年 3 月正式发布. Java 以 6 个月作为新版本的发布周期,和之前的版本发布一样,JDK 14 预计将在语言本身和 JVM 级别上带来一些新特性. 如果我们看一下特性列表,我们会注意到一些开发者非常期待的语言特性:记录 (rec

(14)jdk1.5开始的一些新特性:静态导入,增强for循环,可变参数,自动装箱/拆箱,枚举类型

Jdk1.5新特性之静态导入 jdk1.5新特性值静态导入 静态导入的作用:简化缩写 静态导入的作用:可以作用一个类的所有静态成员. 静态导入的格式:import static 包名.类名.静态的成员 import static java.util.Collections.sort; //静态导入指定的某个静态成员方法 import static java.util.Collections.*;  导入所有的静态成员 除了可以导入静态的成员方法,也可以静态的导入成员变量,比如System.out

web新特性 之 WebSocket

详情参见:你真的了解WebSocket吗?     WebSocket系列教程   HTML5新特性之WebSocket WebSocket协议是基于TCP的一种新的协议.WebSocket最初在HTML5规范中被引用为TCP连接,作为基于TCP的套接字API的占位符.它实现了浏览器与服务器全双工(full-duplex)通信.其本质是保持TCP连接,在浏览器和服务端通过Socket进行通信. 服务端与客户端的连接不断开,实现全双工的操作.及服务端或是客户端都会给对方发送消息. WebSocke