zoukankan      html  css  js  c++  java
  • c++常见关键字 static const new delete inline

    c++:如何去学好c++?那么下面这几个问题和关键字必须要清楚地了解一下

    【1】带默认参数的函数和不带默认参数的函数有何区别?

      提到这个问题,你肯定会说:带默认值的形参必须要在参数的右边,因为函数是自左向右依次赋值,带默认值的函数调用如果调用时没有传入实参,形参就会用默认值。。。

    但是你有没有想过不带默认值的函数调用时会有实参开辟栈,那么带默认值的函数调用既然不用传入实参,会不会减小栈的开销呢?为什么?

      其实带默认值的函数调用时如果没有没有传入实参,形参的默认值会有push 压栈形参,并不会减少汇编指令和栈的开销,所以并不能提高函数的调用效率。

    【2】inline函数

    提到这个问题我们能罗列出一大堆:

    1.inline函数就是在普通函数之前加了一个inline关键字,普通函数的调用有栈的开销,内联函数没有,提高了调用效率

    2.inline函数在编译期间在调用点展开代码,无函数符号的生成,不能进行链接,因此内联函数只在本文件可用,一般写在头文件中,被源文件包含;

    3内联函数必须在调用点之前,只在本文作用域可见;

    4.内联函数只在release版本生效,在debug版本不起作用;

    5.内联函数只是对编译器的建议,是否按内联函数处理就要看编译器的决定了

    【3】static

    static可以修饰变量,可以修饰函数,可以修饰类的成员函数

    static修饰的变量分配在静态存储区,在函数运行结束后销毁,static不能接受this指针,所以static修饰的函数不属于类,static修饰的函数页不能访问类中的函数和变量

    【4】const

      c:常变量
    编译阶段有没有做左值,若常变量没有做左值 其他处理和变量一样
      c++ :常量1.一定要初始化;2.不允许做左值;3.不允许间接修改访问内存块;(杜绝间接访问的风险)

    编译阶段 把const常量使用的地方换成常量初始化的值  ;c++编译器常常不为普通的const常亮分配存储空间,而是将它们保存在符号表中,

    使得他们成为预编译期的常亮,没有存储和读内存的操作,使它的效率非常高;

    const修饰对象函数时:常对象调用常方法

    因为this指针是 test * const     

    【5】new和delete

      

    new/delete
    int *p1 = new int;
    new的重定位:int a; char *p2=new (&p) char('a');
    malloc/free
    int *p = (int *)malloc(sizeof(int));

    1】new是关键字,malloc是函数
    2】new自由存储区(重定位),malloc在堆上
    3】new
    operator new (开辟内存)
    constructor(初始化)
    malloc(申请内存)
    4】operator new 可以重载,malloc不可以重载
    5】new可以调用malloc,malloc不可以调用new(接受版本,向前接受)
    6】内存开辟失败
    new:抛出异常,
    malloc:返回空
    7】new可以开辟常量 const int *p=const new int(10);

    int *p=new int[10];
    delete p;//true
    class test *p=new test [10];
    delete p;//error(需要释放资源和内存,资源要释放十次)

    new的底层实现会在linux中提到(内存管理【很重要】)

  • 相关阅读:
    使用JQuery实现延迟加载UserControl
    VisualStudio中的列选择
    SQL SERVER 2008 CTE生成结点的FullPath
    woocommerce独立站建站
    Java NIO使用及原理分析(二)
    java.io学习总结 转载
    java io与装饰器模式
    函数式思维: 不变性
    函数式思维: 运用函数式思维,第2 部分
    maven添加非官方jar包到本地库(maven: install an external jar into local maven repository)
  • 原文地址:https://www.cnblogs.com/xcb-1024day/p/11234241.html
Copyright © 2011-2022 走看看