C++17 详解 14
本文为 《C++17 in detail》 一书的中文渣中渣译文,不足之处还望指正。
4.4 用 auto
声明非类型模版参数
这是在任何地方使用 auto 策略的另一部分。C++11/14 里你可以利用 auto 自动推断变量甚至返回值的类型,另外还有泛型 lambda。现在你也可以利用它推断非类型模版参数了。
比如:
1 | template <auto value> void f() { } |
本文为 《C++17 in detail》 一书的中文渣中渣译文,不足之处还望指正。
auto
声明非类型模版参数这是在任何地方使用 auto 策略的另一部分。C++11/14 里你可以利用 auto 自动推断变量甚至返回值的类型,另外还有泛型 lambda。现在你也可以利用它推断非类型模版参数了。
比如:
1 | template <auto value> void f() { } |
本文为 《C++17 in detail》 一书的中文渣中渣译文,不足之处还望指正。
if constexpr
这是一个重点!
C++ 的编译时 if
!
此特性可以让你在编译时舍弃基于常量表达式条件的 if
语句的分支。
本文为 《C++17 in detail》 一书的中文渣中渣译文,不足之处还望指正。
C++11 引入了可变参模版,这是一个非常强力的特性,特别是你想实现一个有可变数量的模版参数的函数时。比如,(C++11)之前你不得不实现多个不同版本的模版函数(一个带一个参数、另一个带两个参数、另一个带三个参数……)。
三个大步骤:
本文为 《C++17 in detail》 一书的中文渣中渣译文,不足之处还望指正。
constexpr
lambda 表达式lambda 表达式自 C++11 引入后,就成为了现代 C++ 必不可少的一部分。C++11 的另一个重要特性是“常量表达式”——主要通过 constexpr
声明。C++17 允许这两个元素共存——你可以在一个常量表达式上下文中调用 lambda 。
本文为 《C++17 in detail》 一书的中文渣中渣译文,不足之处还望指正。
if
和 switch
C++17 提供了新版本的 if
和 switch
语句:
if (init; condition)
和 switch (init; condition)
。
本文为 《C++17 in detail》 一书的中文渣中渣译文,不足之处还望指正。
完成了语言修复和阐明的章节后,现在我们准备好浏览其它广泛传播的特性了。本章中描述的改进也有可能使你的代码更加紧凑和富有表现力。
本文为 《C++17 in detail》 一书的中文渣中渣译文,不足之处还望指正。