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


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

    模块导入

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

    1. //Helloworld.cpp
    2. import <iostream>
    3. int main(){
    4. std::cout<<"Hello World!"<<std::end;
    5. return 0;
    6. }

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

    避免重复包含

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

    1. #ifndef MYHEADER_H
    2. #define MYHEADER_H
    3. // ... the contents of thhis header file
    4. #endif

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

    输入输出流

    命名空间

    命名空间中函数的调用

    1. //1
    2. using namespace std;
    3. int main(){
    4. cout << "Hello World!";
    5. }
    6. //2
    7. std::cout << "Hello World!";
    8. //3
    9. using std::cout;
    10. int main(){
    11. cout << "Hello World!";
    12. }

    命名空间的嵌套

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

    C++17前的写法:

    1. namespace MyLibraries{
    2. namespace Networking{
    3. namespace FTP{
    4. /*content*/
    5. }
    6. }
    7. }

    C++17后的写法

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

    命名空间别名

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

    namespace MyFTP = MyLibraries::Networking::FTP;
    

    变量

    数值极限

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

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

    类型转换

    类型转换有如下三种

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

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

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

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

    枚举类型

    1. enum class PieceType{
    2. King = 1,
    3. Queen,
    4. Rook = 10,
    5. Pawn
    6. };

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

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

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

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

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

    1. using enum PieceType;
    2. PieceType piece{King};

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

    1. using enum PieceType::king;
    2. PieceType piece{King};
    3. piece = PieceType::Queen;

    C++表达式

    C++表达式求值逻辑

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

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

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

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

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

    函数

    函数返回类型的推断

    1. auto addNumbers(int number1,int number2){
    2. return number1+number2;
    3. }

    要求:

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

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

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

    Image

    Image

  • 相关阅读:
    Mybatis—SqlNode
    iOS系统暗黑模式
    kubernetes-调度
    基于django的在线教育系统
    先序遍历序列+中序遍历序列构建二叉树
    JAVA8 - java.util.function.Predicate
    森林监测VR虚拟情景再现系统更便利
    以爱情规律为例,浅谈三段式描述状态机
    Rc与Arc实现1vN所有权机制
    排序 “叁” 之交换排序
  • 原文地址:https://blog.csdn.net/m0_69824302/article/details/134220837