C++17 详解 19 — std::any

本文为 《C++17 in detail》 一书的中文渣中渣译文,不足之处还望指正。

翻译太特么累人了……剩余部分还是只做摘要翻译吧。

8. std::any

std::optional 可以表示一个二态值:空值、非空值;

std::variant 表示一个指定类型集合内的类型;

std::any 更进一步,它可以存储任何类型。

综合用例:

阅读更多

C++17 详解 16 — 标准库变动

本文为 《C++17 in detail》 一书的中文渣中渣译文,不足之处还望指正。

翻译太特么累人了……剩余部分还是只做摘要翻译吧。

第二部分——标准库变动

本部分你将学到:

  • 如何通过 std::optional 表达可空(nullable)类型
  • 什么是 tagged union?我们为什么需要 std::variant 这样类型安全的 union
  • 如何通过 std::any 表达任意类型
  • 如何利用 string_view 提高性能并且不破坏你的程序
  • 标准库里都有哪些针对字符串的新加操作
  • 如何利用标准库处理文件系统
  • 什么是并行算法

译注:关于并行算法,我之前已经吐槽过了。结论是不能用,不必期许过深。

C++17 详解 15

本文为 《C++17 in detail》 一书的中文渣中渣译文,不足之处还望指正。

5. 标准属性(attribute)

代码注解——属性——可能不是 C++ 最为人所知的特性。但是,属性却可能便于对编译器和其他程序员传达附加信息。C++11 起有了标准方式来声明属性。C++17 里你将能获得更多属性相关的有用的附加信息。

本章你将学到:

  • C++ 里属性是什么
  • 厂商特有的代码注解 V.S. 标准格式
  • 什么情况下属性是有用的
  • C++11 和 C++14 属性
  • C++17 新添加的属性
阅读更多

C++17 详解 14

本文为 《C++17 in detail》 一书的中文渣中渣译文,不足之处还望指正。

4.4 用 auto 声明非类型模版参数

这是在任何地方使用 auto 策略的另一部分。C++11/14 里你可以利用 auto 自动推断变量甚至返回值的类型,另外还有泛型 lambda。现在你也可以利用它推断非类型模版参数了。

比如:

1
2
template <auto value> void f() { }
f<10>(); // 推断为 int
阅读更多

C++17 详解 13

本文为 《C++17 in detail》 一书的中文渣中渣译文,不足之处还望指正。

4.3 if constexpr

这是一个重点!

C++ 的编译时 if

此特性可以让你在编译时舍弃基于常量表达式条件的 if 语句的分支。

阅读更多

C++17 详解 12

本文为 《C++17 in detail》 一书的中文渣中渣译文,不足之处还望指正。

4.2 折叠表达式

C++11 引入了可变参模版,这是一个非常强力的特性,特别是你想实现一个有可变数量的模版参数的函数时。比如,(C++11)之前你不得不实现多个不同版本的模版函数(一个带一个参数、另一个带两个参数、另一个带三个参数……)。

阅读更多

C++17 详解 11

本文为 《C++17 in detail》 一书的中文渣中渣译文,不足之处还望指正。

4. 模版

你是否用过模版或元编程?

如果你的回答是“是”,那你可能会对本次 C++17 的更新感到非常开心。

阅读更多

C++17 详解 10

本文为 《C++17 in detail》 一书的中文渣中渣译文,不足之处还望指正。

3.4 constexpr lambda 表达式

lambda 表达式自 C++11 引入后,就成为了现代 C++ 必不可少的一部分。C++11 的另一个重要特性是“常量表达式”——主要通过 constexpr 声明。C++17 允许这两个元素共存——你可以在一个常量表达式上下文中调用 lambda 。

阅读更多