C++查漏补缺与新标准(C++20,C++17,C++11)01 C++快速回顾(一)

news2024/12/24 8:09:39

本内容参考C++20高级编程

模块导入

C++ 20提供了对于模块的支持,用来代替之前的头文件机制

//Helloworld.cpp
import <iostream>

int main(){
    std::cout<<"Hello World!"<<std::end;
    return 0;
}

如果在你的编译器中尚未支持模块,只需要将import声明替换为#include预处理指令

避免重复包含

使用预处理指令避免重复执行

#ifndef MYHEADER_H
#define MYHEADER_H
// ... the contents of thhis header file
#endif

在现代编译器(大多数)中也支持使用 #pragma once 指令重写上述代码。

输入输出流

命名空间

命名空间中函数的调用

//1
using namespace std;
int main(){    
    cout << "Hello World!";
}
//2
std::cout << "Hello World!";
//3
using std::cout;
int main(){    
    cout << "Hello World!";
}

命名空间的嵌套

嵌套的命名空间,即将一个名称空间放在另一个名称空间中

C++17前的写法:

namespace MyLibraries{
    namespace Networking{
        namespace FTP{
            /*content*/
        }
    }
}

C++17后的写法

namespace MyLibraries::Networking::FTP{/*content*/}

命名空间别名

可以为命名空间别名,换一个更简单的新名称

namespace MyFTP = MyLibraries::Networking::FTP;

变量

数值极限

C++ 提供了定义在的类模板 std::numeric_limitsewq

cout << "int:\n";
cout<< format(" Max int value:{}\n", numeric_limits< int>:: max( ));
cout<< format(" Min int value:{}\n", numeric_limits< int>:: min( ));
cout<< format(" Lowest int value:{}\n", numeric_limits< int>:: lowest( ));
cout <<"\ndouble:\n";
cout<< format(" Max double value:{}\n", numeric_limits< double>:: max( ));
cout<< format(" Min double value:{}\n", numeric_limits< double>:: min( ));
cout<< format(" Lowest double value:{}\n", numeric_limits< double>:: lowest( ));
上面的代码段在我的系统上的输出如下:
int:
Max int value:2147483647
Min int value:-2147483648
Lowest int value:-2147483648
double:
Max double value:1.79769e+308
Min double value:2.22507e-308
Lowest double value:-1,79769e+308
注意min()和lowest()之间的区别。对于一个整数,最小值等于最低值。然而对于浮点类型来说,最小值表

类型转换

类型转换有如下三种

float MyFloat {3,14f};
    int i1 { (int)MyFloat };
    int i2 { int(MyFloat) };
    int i3 { static_cast<int>(MyFloat)};

第一种数值转换的方法来源于C

第二种数值转换的方法很少使用

第三种数值转换的方法是最推荐的方法

枚举类型

enum class PieceType{
    King = 1,
    Queen,
    Rook = 10,
    Pawn
};

如果没有为当前的枚举成员赋值,编辑器会末尾将上个枚举成员的值递增1,再赋予当前的枚举成员。

枚举对象不会自动超出封闭的作用域,意味着不同的强枚举类型可以有同名的枚举值。

enum class State{Unknow,Stateed,Finished};
enum class Error{None,BadInput,DiskFull,Unknow};

这样就意味着必须使用必须使用枚举值的全名。

C++ 20: 从C++20开始,可以使用using enum声明来避免使用枚举值的全名,这是一个例子

using enum PieceType;
PieceType piece{King};

另外可以用using声明避免某个特定枚举值的全名,但是使用其他枚举值仍然需要使用全名

using enum PieceType::king;
PieceType piece{King};
piece = PieceType::Queen;

C++表达式

C++表达式求值逻辑

C++对表达式求值采用短路逻辑,这意味着一旦最终结果可确定,就不对表达式的剩余部分求值

bool result{bool1 || bool2 || (i>7) || (27/13%i+1)<2 }

三向比较运算符<=>(C++20)

三向比较运算符用于确定两个值的大小顺序,返回类枚举类型,定义在和std名称空间中。 如果操作数是整数类型,返回强排序。

如果操作数是浮点类型,返回偏序。

函数

函数返回类型的推断

auto addNumbers(int number1,int number2){
    return number1+number2;
}

要求:

1.函数体内可以有多个return语句,但是他们必须被解释为同一类型
2.函数可以进行递归调用,但是该函数的第一条return语句必须是非递归调用

当前函数的名称(预定义的局部变量func

每个函数都有一个预定义的局部变量func ,其中包含函数的名称

Image

Image

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1171557.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大数据之陌陌聊天数据分析案例

目录 目标需求 数据内容 基于Hive数仓实现需求开发 1.建库建表、加载数据 2.ETL数据清洗 3需求指标统计 目标需求 基于Hadoop和hive实现聊天数据统计分析&#xff0c;构建聊天数据分析报表 1.统计今日总消息量 2.统计今日每小时消息量&#xff0c;发送和接收用户数 3.…

分隔节点(C++解法)

题目 给你一个链表的头节点 head 和一个特定值 x &#xff0c;请你对链表进行分隔&#xff0c;使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的初始相对位置。 示例 1&#xff1a; 输入&#xff1a;head [1,4,3,2,5,2], x 3 输…

JavaScript 自定义对象

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>JS-定义对象</title> </head><body&g…

leetCode 322.零钱兑换 完全背包 + 动态规划 + 记忆化搜索 + 递推 + 空间优化 + 画递归树

关于此题我的往期文章&#xff1a;LeetCode 322.零钱兑换 完全背包 动态规划_呵呵哒(&#xffe3;▽&#xffe3;)"的博客-CSDN博客https://heheda.blog.csdn.net/article/details/133386579看本期文章时&#xff0c;可以先回顾一下动态规划入门知识和完全背包理论和实战…

MES 与ERP 什么时候能上

中小制造企业数字化转型升级近几年被炒得如火如荼&#xff0c;各种政策的支持、补贴和会议活动的举办&#xff0c;都在给中小制造企业管理者洗脑&#xff0c;一定要数字化升级&#xff0c;否则就被市场淘汰。 中小制造企业其实是弱势群体&#xff0c;向上需要维护好客户&#…

每天五分钟计算机视觉:搭建手写字体识别的卷积神经网络

本文重点 我们学习了卷积神经网络中的卷积层和池化层,这二者都是卷积神经网络中不可缺少的元素,本例中我们将搭建一个卷积神经网络完成手写字体识别。 卷积和池化的直观体现 手写字体识别 手写字体的图片大小是32*32*3的,它是一张 RGB 模式的图片,现在我们想识别它是从 …

JVM虚拟机:垃圾回收器组合参数设定

本文重点 前面的课程中我们介绍了目前JVM中主流的垃圾回收器&#xff0c;不同的回收器会有不同的组合&#xff0c;其中1.8版本的jdk中&#xff0c;默认使用的是Parallel ScavengeParallel Old&#xff0c;也就是说新生代使用Parallel Scavenge&#xff0c;然后老年代使用Paral…

7-3 有趣的最近公共祖先问题 分数 15

#include<iostream> using namespace std;int n 0, m 0; int FindAncestor(int* post, int* in, int a, int b, int size) {int root post[size - 1];if (root a || root b)return root;//中序遍历根的下标int rooti;for (rooti 0; rooti < size; rooti){if (ro…

【Java 进阶篇】Java文件下载案例详解

文件下载是Web应用程序中常见的功能之一。它允许用户从Web服务器上下载文件&#xff0c;例如文档、图片、音频、视频等。在本文中&#xff0c;我们将详细解释如何在Java Web应用程序中实现文件下载功能。我们将提供示例代码和逐步说明&#xff0c;以帮助您理解和实现这一功能。…

C语言编译过程总结

开发C程序有四个步骤&#xff1a;预处理、编译、汇编和链接。任何一个体系结构处理器上都可以使用C语言程序&#xff0c;只要该体系结构处理器有相应的C语言编译器和库&#xff0c;那么C源代码就可以编译并连接到目标二进制文件上运行。 我们创建一个test.c为例来讲解程序编译的…

一次下载的小说txt章节优化记录

缘由&#xff1a; 在线阅读小说有时候因为网络等因素&#xff0c;造成章节不能及时刷新出来&#xff0c;因此经过一番百度&#xff0c;把小说章节下载了下来&#xff0c;但是 章节是错乱的&#xff0c;且参杂很多网站水印&#xff0c;阅读起来挺难受的&#xff0c;因此 优化一…

7-4 修理牧场 分数 15

#include<iostream> #include<queue> using namespace std; #define maxn 10005int main() {int n 0, data 0;cin >> n;//建小堆: //上调建堆中用greater: 父大子小 父子交换 小的上去 大的下去 priority_queue<int, vector<int>, greater<int…

【Java 进阶篇】Java会话技术之Cookie的存活时间

在Web应用程序中&#xff0c;会话管理是一项关键的任务&#xff0c;用于跟踪用户的活动和保持用户状态。Cookie是会话管理的一种重要方式之一&#xff0c;通过Cookie可以存储有关用户的信息&#xff0c;但这些信息不会永久保留&#xff0c;而是有一个特定的存活时间。本篇博客将…

0006Java安卓程序设计-ssm基于Android的校园二手商品交易平台

文章目录 **摘** **要****目** **录**系统设计开发环境 编程技术交流、源码分享、模板分享、网课教程 &#x1f427;裙&#xff1a;776871563 摘 要 随着毕业季的来临以及当代大学生的消费力购买力的不断增强&#xff0c;我们的寝室中囤积了很多二手商品&#xff0c;有很多是…

[动态规划] (六) 路径问题 LeetCode 63.不同路径II

[动态规划] (六) 路径问题: LeetCode 63.不同路径II 文章目录 [动态规划] (六) 路径问题: LeetCode 63.不同路径II题目解析解题思路状态表示状态转移方程初始化和填表返回值 代码实现总结 63. 不同路径 II 题目解析 (1) 机器人从左上角移动到右下角 (2) 机器人只能向右或者向…

Modelsim 使用教程(5)——Analyzing Waveforms

一、概述 Wave窗口允许我们以HDL波形和数据的形式查看仿真结果。Wave窗口被划分为多个窗格。通过单击并在任意两个窗格之间拖动该条&#xff0c;可以调整路径名窗格、值窗格和波形窗格的大小。 二、加载一个设计&#xff08;Loading a Design&#xff09; 1、打开modelsim 2、…

iOS开发 Command PhaseScriptExecution failed with a nonzero exit code

解决步骤&#xff1a; 1.重启电脑 2.把xcode项目Build Setting中的Sandboxing置为No 3.重跑项目

asp.net docker-compose添加volume配置

打开docker-compose.override.yml下面添加 volumes:killsb-one-sqldata:external: false 服务下面添加volume配置 volumes:- "./dapr/config/social-client.json:/app/OidcSettings.json" 添加volume配置成功

2023年内衣行业分析:京东大数据平台-服饰内衣市场解析

如今&#xff0c;女性消费力的提升正在推动国内女性内衣市场份额逐年提升。而今年&#xff0c;内衣市场更是进入了存量之战&#xff0c;增长趋势明显减弱。 根据鲸参谋数据显示&#xff0c;今年1月至9月&#xff0c;京东平台内衣&#xff08;文胸&#xff09;累计销量约500万件…

jvm实践

说一下JVM中的分代回收 堆的区域划分 1.堆被分为了两份:新生代和老年代[1:2] 2.对于新生代&#xff0c;内部又被分为了三个区域。Eden区&#xff0c;幸存者区survivor(分成from和to)[8:1:1] 对象回收分代回收策略 1.新创建的对象&#xff0c;都会先分配到eden区 2.当伊园内存…