首页 > 编程语言 >C++ 17新特性

C++ 17新特性

时间:2024-03-09 14:35:09浏览次数:40  
标签:std return cout 17 特性 constexpr C++

C++17 是 C++ 语言的一个重要版本,引入了许多新特性和改进,以提高开发效率和代码质量。以下是一些常用的 C++17 新特性:

  1. 结构化绑定(Structured Bindings):允许以声明式语法将复合类型(如元组、数组、结构体)中的成员绑定到变量上,从而简化代码并提高可读性。
#include <tuple>

std::tuple<int, double> getValues() {
    return std::make_tuple(10, 3.14);
}

int main() {
    auto [x, y] = getValues();
    std::cout << "x: " << x << ", y: " << y << std::endl;
    return 0;
}
  1. if 语句中的初始化器(Initialization in if statements):允许在 if 和 switch 语句中使用初始化器(初始化表达式)来初始化条件变量。
if (int x = getValue(); x > 0) {
    // 如果 getValue() 返回值大于 0,则执行这里的代码
}
  1. 折叠表达式(Fold Expressions):引入了折叠表达式,可以对参数包中的元素进行重复操作。
template<typename... Ts>
auto sum(Ts... ts) {
    return (ts + ...);
}

int main() {
    std::cout << sum(1, 2, 3, 4, 5) << std::endl; // 输出 15
    return 0;
}
  1. if constexpr:引入了 if constexpr,允许在编译时进行条件判断并选择性地编译代码块。
template<typename T>
void process(T t) {
    if constexpr(std::is_integral<T>::value) {
        std::cout << t << " is an integral type." << std::endl;
    } else {
        std::cout << t << " is not an integral type." << std::endl;
    }
}

int main() {
    process(10);    // 输出 10 is an integral type.
    process(3.14);  // 输出 3.14 is not an integral type.
    return 0;
}
  1. std::optional:引入了 std::optional 类模板,用于表示一个可能不存在的值。
#include <optional>

std::optional<int> getValue(bool condition) {
    if (condition) {
        return 42;
    } else {
        return std::nullopt;
    }
}

int main() {
    auto value = getValue(true);
    if (value.has_value()) {
        std::cout << "Value: " << value.value() << std::endl;
    } else {
        std::cout << "No value" << std::endl;
    }
    return 0;
}

除了上述特性外,C++17 还引入了其他一些有用的特性,如类模板参数推导、内联变量、constexpr if、标准库的增强等。这些新特性可以提高代码的清晰度、可读性和性能,并且是 C++ 编程中不可或缺的一部分。

标签:std,return,cout,17,特性,constexpr,C++
From: https://www.cnblogs.com/fly-smart/p/18062661

相关文章

  • C++ Qt开发:QNetworkInterface网络接口组件
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QNetworkInterface组件实现查询详细的网络接口参数。在Qt网络编程中,QNetworkInterface是......
  • Living-Dream 系列笔记 第17期
    ProblemT1/*思路:分类讨论:若k=0,则输出x+1;若k>tot(x的位数),则输出1+k-tot个0+x;否则输出10^k+x。*/#include<bits/stdc++.h>usingnamespacestd;longlongk,x,tot,ans=1;//开longlongintmain(){ cin>>k>>x; if(k==0){cout<<x+1;return0;}//情况1......
  • P3670 [USACO17OPEN] Bovine Genomics S 题解
    题意给定\(2\)组字符串,每组\(n\)个,每个字符串包含\(m\)个字符。我们称一个三元组\((i,j,k)\)是合法的,当且仅当第二组的每个字符串中下标为\((i,j,k)\)的字符拼成的字符串与第一组的每个字符串中下标为\((i,j,k)\)的字符拼成的字符串均不相等。现在需要你对于给定的......
  • P10217 [省选联考 2024] 季风题解
    考场上没写出来,火大,实际上这题放校内%你赛我肯定写的出来,可惜这是省选。实际上这题不难,主要是观察性质,接着拆柿子,然后就是有点难写,要写得好看有点考验代码构建能力和数学能力。我们考虑原题的每对\((x,y)\)都要满足\(|x|+|y|\lek\)而我们可以知道后面应该填的\((x,y)\)如......
  • Java入门(Java诞生、特性、版本、开发环境搭建)
    Java入门1.Java帝国的诞生—一场旷日持久的战争(1)1972年C语言诞生:贴近硬件,运行极快,效率极高;应用于:操作系统、编译器、数据库、网路系统等;难点:指针和内存管理;(2)1982年C++诞生:面向对象;兼容C语言;应用于:图像领域、游戏等;(3)Java帝国的诞生:1995年Java诞生:网页简单而粗糙......
  • CF1799G
    同样来自@Explodingkonjac学长的讲题。但是我没认真听讲,所以自己想出来了。原本的想法是设对于每一组分别设\(dp_{i,j}\)为当前枚举到第\(i\)个位置,已经钦定了\(j\)个该组中的人投给自己组的方案数。转移就是枚举有多少人投给\(i\)然后容斥。但是可能是我没有处理好,总......
  • abc317D 选举总统
    题面:有n个区,第i个区有x[i]+y[i]个选民,其中x[i]支持A,y[i]支持B,支持人数多的一方获得该区的全部票数z[i],全部区的票数之和多者获胜,问至少还要多少选民从支持B改为支持A,才能让A胜出?范围:1<=n<=100;0<=x[i],y[i]<=1E9;x[i]+y[i]为奇数,z[i]>=1,z[i]之和为奇数且不超过1E5。思路:将各......
  • MYSQL学习笔记17: 流程控制函数(IF, CASE)
    流程控制函数(IF,CASE)ifselectif(true,'ok','error');selectif(false,'ok','error');/*相当于iftrue:ok;else:error;*/ifnullselectifnull('ok','default');selectifnull(......
  • C++ Qt开发:QHostInfo主机地址查询组件
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QHostInfo组件实现对主机地址查询功能。在Qt网络编程中,QHostInfo是一个强大而灵活的组件......
  • 代码随想录算法训练营day17 | leetcode 110. 平衡二叉树、257. 二叉树的所有路径、404
    目录题目链接:110.平衡二叉树-简单题目链接:257.二叉树的所有路径-简单题目链接:404.左叶子之和-简单题目链接:110.平衡二叉树-简单题目描述:给定一个二叉树,判断它是否是平衡二叉树示例1:输入:root=[3,9,20,null,null,15,7]输出:true示例2:输入:root=[1,2,2,3,3,null,nul......