GMTC深圳站本周日开幕,14大专题全部上线,完整日程>> 了解详情
写点什么

C++14 新特性总结

  • 2014 年 9 月 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 年 9 月 10 日 08:2123266
用户头像
臧秀涛 略懂技术的运营同学。

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

关注

评论

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

架构师实战营 模块一作业 微信业务架构图

好吃不贵

H1 作业1

dwade

#架构实战营 模块一作业

薛定谔的指南针

架构实战营

模块一

^_^vincent

架构实战营 模块一作业

fazinter

架构实战营 作业一

业务架构训练营第 0 期模块一作业

菠萝吹雪—Code

Redis 6.0 多线程、客户端缓存、权限控制

escray

redis 学习 极客时间 Redis 核心技术与实战 4月日更

数据结构和算法

奈奈奈奈

数据结构与算法

华仔架构设计-模块1作业

大师兄

模块一作业

鲲哥

Dubbo源码阅读-泛化调用实现原理

小江

dubbo RPC

架构实战营 - 模块01作业

架构实战营

面试官

ES_her0

4月日更

你才不是只会理论的女同学-seata实践篇

你呀不牛

Java MySQL spring 事务 seata

编程好习惯之理清数据的可变性

顿晓

4月日更 不可变

Vue中Echarts基本使用

Chalk

前端 eCharts 4月日更

80%的人都不会的,15个Linux实用技巧

程序员肖邦

Linux

区块链技术引领新一轮技术变革浪潮

Geek_987812

学生管理系统架构

Fleng

架构实战营

架构实战营模块一 - 总结

凯迪

架构实战营课程一作业

Saber

架构实战营

区块链技术,通证经济未来趋势,两者有什么关系?

Geek_987812

区块链

复兴or幻象?VR的2021三重门

脑极体

跟着源码一起学:手把手教你用WebSocket打造Web端IM聊天

JackJiang

网络编程 websocket 即时通讯 IM

服务器如何修复旧加密算法漏洞

运维研习社

4月日更 服务器安全

架构实战营 模块一作业

ercjul

架构实战营

树莓派的组装与开机

IT蜗壳-Tango

IT蜗壳教学 4月日更

【Java试题】从一道题目再看Java继承

程序员架构进阶

Java 面试 28天写作 4月日更

[架构实战营][0期]模块1学习总结

张民

架构实战营

vue接入腾讯实时音视频trtc-js-sdk的技术难点与解决方案

孙叫兽

Vue 音视频 解决方案 trtc-js-sdk

区块链技术解决信任问题

Geek_987812

信任 信任机制

2021星空论坛:破局创新,论道数字化转型

2021星空论坛:破局创新,论道数字化转型

C++14新特性总结-InfoQ