写点什么

C++14 新特性总结

  • 2014-09-10
  • 本文字数:1077 字

    阅读完需:约 4 分钟

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 的新特性提供了一些支持。

查看英文原文: C++14 Is Here: Summary of New Features

2014-09-10 08:2125714
用户头像
臧秀涛 略懂技术的运营同学。

发布了 300 篇内容, 共 125.7 次阅读, 收获喜欢 33 次。

关注

评论

发布
暂无评论
发现更多内容

测试环境

乌龟哥哥

三周年连更

怎样成为优秀的后端工程师

越长大越悲伤

后端、 java‘

spss专业增强版软件安装包下载

好运

SPSS

spss官方完整版专业版安装包下载

好运

网易伏羲RL4RS荣获SIGIR2023 Resource Paper,推动深度学习技术创新

网易伏羲

spss破解版32位简体中文版安装包下载

好运

使用NineData定制企业级数据库规范

NineData

数据库 dba 企业管理工具 数据库开发工具 企业级数据库规范

怎么在 vue 中使用 form 清除校验状态?

海拥(haiyong.site)

三周年连更

Java 如何在 Array 和 List 之间进行转换

HoneyMoose

Mac软件:Visio绘图注释工具VSDX Annotator

春天的风暖暖的

使用MASA全家桶从零开始搭建IoT平台(三)管理设备的连接状态

MASA技术团队

IoT MASA .NET 7

小程序开发中的插件、组件、控件,傻傻分不清楚

没有用户名丶

面试前必刷!Java高级工程师1380道面试题(附答案)分享

架构师之道

Java 面试

持续交付下的分层自动化测试

单东东

DevOps 持续交付 持续测试 测试自动化 junit5

2分钟快速上手流水线的创建与运行

华为云开发者联盟

开发 华为云 华为云开发者联盟 企业号 5 月 PK 榜

万字长文详解如何使用Swift提高代码质量 | 京东云技术团队

京东科技开发者

swift 代码质量 代码质量检测工具 京东技术 企业号 5 月 PK 榜

Java 如何在 Array 和 Set 之间进行转换

HoneyMoose

什么是人工智能领域的深度学习?

Jerry Wang

人工智能 深度学习 强化学习 三周年连更

从原理到应用,人人都懂的ChatGPT指南 | 京东云技术团队

京东科技开发者

人工智能 AI ChatGPT4 企业号 5 月 PK 榜

LED显示屏行业发展步伐

Dylan

发展 科技 LED显示屏

HBase:Hadoop生态系统中的分布式NoSQL数据库【上进小菜猪大数据系列】

上进小菜猪

hadoop 上进小菜猪

万字长文——Go 语言现代命令行框架 Cobra 详解

江湖十年

golang 后端 命令行 命令行工具

spss中文免费版安装教程

好运

ChatGPT是很强,但也会胡说八道

这我可不懂

人工智能 低代码 ChatGPT

文盘Rust —— rust连接oss | 京东云技术团队

京东科技开发者

rust OSS 对象存储 rust语言 企业号 5 月 PK 榜

spss简体中文版免激活安装图文教程

好运

SPSS spss数据统计 IBM SPSS Statistics中文 IBM SPSS Statistics破解 IBM SPSS Statistics下载

探讨AIGC的崛起历程,浅析其背后技术发展

华为云开发者联盟

人工智能 华为云 AIGC 华为云开发者联盟 企业号 5 月 PK 榜

只需要六步!快速开启专属的风控系统

Geek_2d6073

简单好用的网页设计工具:EverWeb中文版

真大的脸盆

Mac 网页设计 Mac 软件 网页布局 网页制作

平台工程助力企业提升研发效能

SEAL安全

研发效能 平台工程

2023一线大厂 Java 面试八股文大全(整理版)附答案详解!

采菊东篱下

Java 面试

C++14新特性总结_C++_Sergio De Simone_InfoQ精选文章