C++气象数据中心实战,手把手教你做工业级项目MK

146 阅读1分钟

Download:百度网盘 提取码:45on

C++迭代速度相对来说还是比较慢的,2010年以后,C++的新版本迭代速度有所加快,这一点,从C++标准版本的历史发布图1就可以看出来:

 C++11算是更新比较大的一次了,引入了很多新属性,以至于C++11出来以后,好多C++同行感叹,这看了C++11感觉像是在学习一门新语言!哈哈,这可能跟C++属性众多和库众多有关吧。现在我们来看看C++17的新增属性吧。

 C++17的入选特性有:

(1).非类型模板参数的 auto

  模板参数分为两种,一种是类型模板参数,也是我们用得最多的一种:

template <typename T, typename U> auto add(T t, U u) { return t+u; } 里面的 T 和 U 都是类型模板参数。另一种是非类型模板参数,它可以让不同的字面量成为模板的参数:

template <typename T, int BufSize> class buffer_t { public: T& alloc(); void free(T& item); private: T data[BufSize]; }

buffer_t<int, 100> buf; // 100 作为模板参数 遗憾的是我们在编写模板的时候就必须明确非类型模板参数的具体类型,C++17 打破了这一限制,让我们能够在非类型模板参数中使用 auto 关键字,从而让编译器推导具体的类型:

template void foo() { return; }

foo<10>(); // value 被推导为 int 类型 (2).std::variant<>

   熟悉 boost 的人应该很早就听说过 variant<> 了。variant<> 可以用于存储和操作不同类型的对象。我们在前面(对标准库的扩充:新增容器)对于迭代 std::tuple 时,简单使用了 boost::variant<>。提供给 variant<> 的类型模板参数可以让一个 variant<> 从而容纳提供的几种类型的变量(在其他语言(例如 Python/JavaScript 等)表现为动态类型)。