• C++ 一些容易忽略的基本点


    new 高级应用

    delete 其他用途帮助函数严格匹配类型

    char teststr[100] = { 0 };// 静态区
    void test3()
    {
    // 堆区
    int *p = new int[3]{1, 2, 3};
    //分配到以teststr开头的空间内 全局静态区
    int *p2 = new (teststr) int[3]{1,2,3};
    for (int i = 0; i < 3; i++)
    {
    cout << p[i] <<" "<< &p[i] << " " << p2[i]<<" " << &p2[i] << endl;
    }
    // 这段内存可以反复利用 同理 栈区 都可以
    // 无论堆栈静态区 都不能delete p2
    int *p2_ = new (teststr) int[3]{4, 5, 6};

    静态区对象优先main执行
    基本数据类型malloc new一样
    malloc free不会调用构造析构函数 不能混用

    通过重载new 和delete 可以统计对象个数
    规避一个指针被重复释放

    函数模本和类模板 2这区别 函数模板使用不需要置顶类型 因为编译器会自动帮你做 类模板则不会

    函数模板调用的时候才编译 否则不会进行语法检查

    函数模板 返回两个值中的较小者 同时能正确处理字符串

    可以重载string类的>运算符 相比c里面的宏 的确很灵活

    C++ 新语法 自动推导数据类型

    C++类 析构函数 为虚函数 多态

    友元函数能访问私有数据成员

    类型一致 的初始化可用initializer_list
    如果是不一致的 可变参数模板
    结构体具备类的所有功能
    设置一个不允许回收不允许在堆上创建
    重载delete new = delete删除函数
    默认继承 struct公有 而class私有
    有了初始值就不能私用大括号初始化
    但是数组成员不能有初始值 而且只能用=来初始值
    例如 字符数组不可以 字符指针可以
    拓展作用域 类的声明

    非静态成员函数后面加const(加到非成员函数或静态成员后面会产生编译错误),表示成员函数隐含传入的this指针为const指针,决定了在该成员函数中,任意修改它所在的类的成员的操作都是不允许的(因为隐含了对this指针的const引用);唯一的例外是对于mutable修饰的成员。加了const的成员函数可以被非const对象和const对象调用,但不加const的成员函数只能被非const对象调用
    一般对于不需修改操作的成员函数尽量声明为const成员函数,以防止产生const对象无法调用该成员函数的问题,同时保持逻辑的清晰
  • 相关阅读:
    windows下Mysql免安装版,修改my_default.ini配置文件无效的解决办法
    下压桟(LIFO)
    Dijkstra的双栈算术表达式求值算法
    获取中文的完整拼音并输出
    解析一个文件夹所有文件的中文,并输出到某一文本文档中
    在含有中英文字符串的信息中,提出中文的方法
    创建计算字段
    Docker 常用命令
    mqtt常用命令及配置
    LOG4J
  • 原文地址:https://www.cnblogs.com/huoxl/p/4557171.html
Copyright © 2020-2023  润新知