21xrx.com
2024-11-22 06:58:08 Friday
登录
文章检索 我的文章 写文章
C++17新特性介绍
2023-07-02 13:02:39 深夜i     --     --
C++17 新特性 语言更新 标准库改进 性能优化

C++17在时间上相对于前一版本C++14间隔较短,但它带来的改进和新增特性却是非常丰富的。下文将简要介绍C++17的几个新特性。

1. 结构化绑定

在C++17之前,要访问一个tuple或者pair里的元素,需要通过std::get函数逐个获取,非常麻烦。而现在可以使用结构化绑定,一次性将它的内容分解到一些局部变量里。


std::tuple<int, float, std::string> tpl(42, 3.14, "hello");

auto [i, f, s] = tpl; //结构化绑定语法

2. if及switch语句的初始化

C++17中,if语句和switch语句支持初始化,比如:


if(const int x = calculate_value(); x > 20) {...}

switch(char ch = get_char(); ch) {...}

3. constexpr if语句

C++17新增了一个constexpr if语句,可以让我们在编译期间判断不同的分支,例如:


if constexpr(sizeof(int) == 4) {...}

else if constexpr(sizeof(int) == 8) {...}

4. 在lambda表达式中使用auto

在C++14中,lambda表达式的参数列表中,只支持类型明确的参数声明,而C++17中,可以使用auto来推导参数类型。


auto lambda = [] (auto&& ... args) { /*...*/ };

5. 算法库的改进

C++17加入了很多新的算法,包括较常用的std::clamp、std::sample和std::gcd等。这些算法让我们的代码简洁高效,并且提高了程序的可读性。

6. 完美转发的改进

C++17中修改了函数返回引用的类型推导规则,使得我们在使用完美转发时更容易使用auto类型推导。


template<typename T>

decltype(auto) func(T &&t) {...} //返回使用auto读取类型推导的结果类型

总结一下,C++17带来一系列的语法糖和核心库的改进,在使用上更加聪明、简便、高效。很多已有的代码也可以通过升级到C++17使用新特性,使其变得更好、更加可读 、可维护。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复