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

本内容参考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

相关推荐
ShineWinsu2 小时前
对于C++:IO流状态的详细解析
c++·面试·io·cin·io流状态·goodbit·failbit
M-Robots echo2 小时前
轻量化裁剪方案解析:M-Robots 模块化构建,适配高低端各类机器人硬件平台
java·机器人·ros·开源社区·atomgit·m-robots
不可求~2 小时前
多模型路由怎么落地:把任务分流写进项目的最小实现
java·前端·数据库
Lzg_na3 小时前
constexpr的优势
c++
mldong3 小时前
用 DDD 设计工作流引擎:聚合根与充血模型
java·架构
mqiqe4 小时前
AgentScope Java Harness:4. 双层记忆系统 让 Agent 拥有真正的“长期大脑“
java·开发语言
伍一514 小时前
03-文件管理模块-一个看似简单的模块藏着多少细节
java·ruoyi·若依
gugucoding4 小时前
46. 【Java】JUC并发工具:让并发更简单
java·开发语言
王维同学4 小时前
进程模块枚举、映像身份与线程启动地址关联
c++·windows·安全
hold?fish:palm4 小时前
24 回文链表
数据结构·c++·链表