0

0

C++17 的最终特性

黄舟

黄舟

发布时间:2017-02-06 14:15:02

|

1615人浏览过

|

来源于php中文网

原创

最近几周,C++委员会在奥卢(oulu)召开会议,c++17的最终特性得以确定,并且它即将成为一个国际标准。在杰克逊维尔(jacksonville)召开的最后那次会议之后,我对于c++17能给人带来大惊喜未抱太大的希望,但是奥卢会议却努力地为c++17新标准增加一些重要而且有趣的特性。reddit页面提供了一个很好的c++17特性总览,并且,herb sutter在最近的cppcast站点上(还有他的行程报道) 也给出了有关c++17特性的很好的见解。另外,michael wong给我们呈现出了c++17特性的更加完整的概述 。

先说重要的

正如我前面所说,在杰克逊维尔(Jacksonville)召开的那次会议之后,C++17的很多特性已经非常明确。对于是否转向C++17,我写了一篇包括三个部分的博客系列文章,提出了一些建议。我们将进入C++的新世纪,和强大的技术规范一同发布的还有相关的标准,这些都将成为下一代C++标准的组成部分。这意味着,那些非C++17的特性(例如,Concepts或Modules思想)将在即将发布的编译器中作为插件使用。Visual Studio目前提供了modules,而GCC却是第一个支持concept的编译器。Clang也支持modules,并且Visual Studio和Clang不久都会实现基于module TS的规范。

而且,我在想,接下来的两次会议将主要处理一些评论、反馈和各个国家团体(又称ISO成员代表团)所提出的问题。C++的标准不会增加新内容,而是会有一些或多或少的改变。但还是希望所有的这些特性能在最终的审核中获得通过。

C++17的最终亮点

std::variant(变体)

让我们从最让我惊讶的地方开始:变体。是的,严肃的说,C++17带来了std::variant。这太棒了,并且为将来基于变体和其他相关想法的特征铺平了道路。例如,样式匹配,C++上关于这个有一个非常好的谈话。根据David Sankel所说,std::variant是按照boost::variant和或其他variant库进行设计的。与boost::variant有非常相似的API

立即学习C++免费学习笔记(深入)”;

variant v, w;
v = 12;int i = get(v);
w = get(v);
w = get<0>(v); // same effect as the previous linew = v; // same effect as the previous lineget(v); // ill formedget<3>(v); // ill formedtry {
  get(w); // will throw.}catch (bad_variant_access&) {}

能看到这个特征收录到了C++17标准中,而不是采用TS detour,非常高兴。

if constexpr(expression)

这是static if的C++版本(差不多)。对于我来说这是Jacksonville的亮点之一,那时,这并没有让它采用。不负众望,它通过了Oulu对于C++17的最终回顾。有了它,如果在编译过程中,一个constexpr被评估为真,C++可以轻松的让某些语句块编译:

if constexpr (std::is_integer ...) 
{ //integerstuff }
else if constexpr (std::is_floating_point ...) 
{ //floatingpointstuff }
else { // NaN ;) }

这个例子显式的说明了,constexpr必须在编译中被判断为真,但是对于static_assert没有影响。语句块中没被选定的static_assert仍然会触发。这对于标准来说是不恰当的。

还有一个有趣的地方:这个特征写为if constexpr,但是标准的拼写仍然将其命名为constexpr if,但是将它定义为了if constexpr。

在模板中使用auto

对于C++14,匿名表达式能使用auto来定义泛型参数。 目前定义(非类型)模板参数也是可以使用auto的。这使得编写模板代码变得更加容易,因为auto要比class或typename更简短。定义可变长模板参数也可以使用auto,例如:template

千博购物系统.Net
千博购物系统.Net

千博购物系统.Net能够适合不同类型商品,为您提供了一个完整的在线开店解决方案。千博购物系统.Net除了拥有一般网上商店系统所具有的所有功能,还拥有着其它网店系统没有的许多超强功能。千博购物系统.Net适合中小企业和个人快速构建个性化的网上商店。强劲、安全、稳定、易用、免费是它的主要特性。系统由C#及Access/MS SQL开发,是B/S(浏览器/服务器)结构Asp.Net程序。多种独创的技术使

下载

结构化的绑定

直至现在,仍在使用一个有名的诀窍,就是随意使用std::tie来直接分配一个元组或者一对不同的变量,而不需要手动处理结果类型。这是一个技巧,而且变量必须要存在, 现在你可以在一行中声明变量并进行初始化:

auto [a , b , c] = getvalues();

括号不能少,getvalues返回一个元组。在建议中没有提及std::pair,所以使用pair是否也能正常运行并不明确,在一些插入(insert)方法中它是由STL返回的。

if 和 switch 与 初始化

现在 if 语句中可以定义变量了:if(int x = 42; true != false),这可以结合前面的建议。在一个 if 语句定义的变量在它的 else 部分也是是有效的。我记得现代 C++ 设计曾提示通过花括号这样一个技巧来实现这个功能,但是这仅仅是单个变量。

使用这个案例是有趣的,例如在 if 或 switch 中进行锁定,所有这些函数返回的状态码现在都可以在 if 的内部被处理。从本质上来说,这相当于写成 { var x = value; if(...){}else{}} 。

更多

这还不是全部,比如,为了copy ellision(拷贝去除)的改进,保留了std[0-9]+的名称空间给未来的标准。还有,对于reddit的看法也有着许多有趣的讨论和观点。

C++ 17标准正逐步发展完善,标准化的工具也已成熟并且投入使用。这对C++来说是最大的收获。那些想要给下一个C++标准添砖加瓦的人,或许现在就得开始制定计划了。C++的标准化一直是由志愿者们来推动的,做这个事情没有钱拿,大家基本上都是一些日常工作和C++相关的人。建议大家去看看isocpp.org,上面有非常nice且详细的介绍,同时也有各种各样的mailing lists(邮件表)和工作组供大家加入。

以上就是C++17 的最终特性的内容,更多相关内容请关注PHP中文网(www.php.cn)!

相关文章

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

2

2026.01.29

java配置环境变量教程合集
java配置环境变量教程合集

本专题整合了java配置环境变量设置、步骤、安装jdk、避免冲突等等相关内容,阅读专题下面的文章了解更多详细操作。

2

2026.01.29

java成品学习网站推荐大全
java成品学习网站推荐大全

本专题整合了java成品网站、在线成品网站源码、源码入口等等相关内容,阅读专题下面的文章了解更多详细推荐内容。

0

2026.01.29

Java字符串处理使用教程合集
Java字符串处理使用教程合集

本专题整合了Java字符串截取、处理、使用、实战等等教程内容,阅读专题下面的文章了解详细操作教程。

0

2026.01.29

Java空对象相关教程合集
Java空对象相关教程合集

本专题整合了Java空对象相关教程,阅读专题下面的文章了解更多详细内容。

3

2026.01.29

clawdbot ai使用教程 保姆级clawdbot部署安装手册
clawdbot ai使用教程 保姆级clawdbot部署安装手册

Clawdbot是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

25

2026.01.29

clawdbot龙虾机器人官网入口 clawdbot ai官方网站地址
clawdbot龙虾机器人官网入口 clawdbot ai官方网站地址

clawdbot龙虾机器人官网入口:https://clawd.bot/,clawdbot ai是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

16

2026.01.29

Golang 网络安全与加密实战
Golang 网络安全与加密实战

本专题系统讲解 Golang 在网络安全与加密技术中的应用,包括对称加密与非对称加密(AES、RSA)、哈希与数字签名、JWT身份认证、SSL/TLS 安全通信、常见网络攻击防范(如SQL注入、XSS、CSRF)及其防护措施。通过实战案例,帮助学习者掌握 如何使用 Go 语言保障网络通信的安全性,保护用户数据与隐私。

8

2026.01.29

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

622

2026.01.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 7.9万人学习

C 教程
C 教程

共75课时 | 4.3万人学习

C++教程
C++教程

共115课时 | 14.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号