C++17 详解 19 — std::any
本文为 《C++17 in detail》 一书的中文渣中渣译文,不足之处还望指正。
翻译太特么累人了……剩余部分还是只做摘要翻译吧。
8. std::any
std::optional 可以表示一个二态值:空值、非空值;
std::variant 表示一个指定类型集合内的类型;
std::any 更进一步,它可以存储任何类型。
综合用例:
本文为 《C++17 in detail》 一书的中文渣中渣译文,不足之处还望指正。
翻译太特么累人了……剩余部分还是只做摘要翻译吧。
std::optional 可以表示一个二态值:空值、非空值;
std::variant 表示一个指定类型集合内的类型;
std::any 更进一步,它可以存储任何类型。
综合用例:
本文为 《C++17 in detail》 一书的中文渣中渣译文,不足之处还望指正。
翻译太特么累人了……剩余部分还是只做摘要翻译吧。
variant 是一种类型安全的 union。
头文件:
1 |
综合应用示例:
本文为 《C++17 in detail》 一书的中文渣中渣译文,不足之处还望指正。
翻译太特么累人了……剩余部分还是只做摘要翻译吧。
std::optional 可表达可空类型。
头文件:
1 |
本文为 《C++17 in detail》 一书的中文渣中渣译文,不足之处还望指正。
翻译太特么累人了……剩余部分还是只做摘要翻译吧。
本部分你将学到:
译注:关于并行算法,我之前已经吐槽过了。结论是不能用,不必期许过深。
本文为 《C++17 in detail》 一书的中文渣中渣译文,不足之处还望指正。
代码注解——属性——可能不是 C++ 最为人所知的特性。但是,属性却可能便于对编译器和其他程序员传达附加信息。C++11 起有了标准方式来声明属性。C++17 里你将能获得更多属性相关的有用的附加信息。
本章你将学到:
本文为 《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 。