• CPP 新语法规则笔记


            时隔多年又开始拾起CPP 开始使用,以前一直用的C++98,而今 C++20都已经出来了。为了方便自己查阅新语法规则,所以将自己遇到的CPP语法规则归纳总结方便查阅。

    一、数据类型

    二、类

            2.1 类成员属性,可以再申明时指定默认值

    1. class Test
    2. {
    3. private:
    4. int m_a = 0;
    5. };

    三、模板

     3.1 尾置返回类型

            用于在模板函数中由于模板参数不定我们没办法推断函数返回类型时使用,由于尾置返回的类型由 decltype() 得到,有时候我们需要这这些类型做些处理才是我们想要的,那么可以配合内置函数 5.1 使用 

    1. //返回迭代器引用
    2. template<typename It>
    3. auto func(It beg) -> decltype(*beg)
    4. {
    5. return *beg;
    6. }
    7. /*
    8. 通过尾置返回类型的定义,我们可以通过 decltype 分析得到*beg 类型
    9. 为了丰富尾置返回,还内置了一系列的标准款函数
    10. */

    3.2 不定模板参数

            用于定义参数不定的模板

    1. template<typename ...ARGS>
    2. void foo(const ARGS& ... args){}
    3. //实例调用如下
    4. foo(1, true, std::string("test")) ///会自动推导出 foo(int, bool, std::string)的函数

    3.3 sizeof...(args) 

            用于获得不定参数模板类获得参数数量

    1. template<typename ...Args>
    2. void func(const Args&... args)
    3. {
    4. cout << sizeof...(Args) << endl; // 类型参数得的数量
    5. count << sizeof...(args) << endl; //函数参数的数量
    6. }

    四、语法规则

    4.1  auto 类型

            用于编译阶段能自动推导出类型的 动态类型申明。有时候我们赋值操作时申明类型需要去看我们赋值对象的类型然后写对应类型。auto 申明的变量必须赋值,否则无法编译时就推导出类型了。

    1. int a = 1, b = 2;
    2. auto c = a + b; // c 将推导为 int

    4.2 delctype 函数

            在运行阶段动态推导类型。

    1. double a = 10.123;
    2. int b = 20;
    3. decltype(a+b) c; //这里和auto不一样,不需要立即赋值,但
    4. c = a + b;

    五、新库

    5.1 模板类型处理

    remove_reference 返回去掉T 的引用属性的普通类型   X&/X&& ->  X

    add_const 返回T 类型增加 const 修饰变成常量类型   X ->> const X

    add_lvalue_reference  返回T 对应的 左值引用类型    X -> X&

    add_rvalue_reference 返回T 对应的右值引用类型     X -> X&&

    remove_pointer 去掉T的指针修饰,变成对应的值类型   X* -> X

    add_pointer 给T增加指针修饰,变成T类型的指针类型  X -> X*

    make_signed 将无符号类型,变成有符号类型  unsigned X -> X

    make_unsigned 将有符号类型变成无符号类型  signed X -> unsigned X

    remove_extent  去掉一维数组修饰  X[n] -> X      

    remove_all_extentx  去掉所有维度数组修饰  X[n1][n2] -> X

  • 相关阅读:
    JS事件keydown捕捉回车键Enter/Esc
    设置HTTP代理隧道
    为Electron-log 设置日志颜色
    Java中的<<、>>、>>>运算符
    线性回归算法——小批量随机梯度下降
    python django 小程序点餐源码
    string字符串类
    FPGA 之 设计实现过程
    C++QT实现压缩文件、文件夹和解压缩操作
    Denoising diffusion implicit models 阅读笔记
  • 原文地址:https://blog.csdn.net/xzben/article/details/126078483