zoukankan      html  css  js  c++  java
  • C++与C的区别

    ctrlp插件的使用:
         >连按两下,,打开 ctrlp
         >关闭 ctrlp ,按Esc
         >往上进行查找,按 ctrl+k
         >向下进行查找,按 ctrl+j
         >以多标签的形式打开某一个文件,按 ctrl+t
         >在多标签形式下进行文件选择时,
              向右: g+t
              向左: g+T
         >ctrlp 以 .git   .svn  所在的目录





    new/delete , malloc/free
             malloc是库函数,它只负责开辟空间,该空间的内容是不确定的并不会初始化,free进行释放
             new是一个表达式,它负责开辟空间,并且能够初始化该空间的内容的,delete 进行释放 
    int *pd=new int[10]();   //()为赋值,不写默认为0;
    delete []pd;
    //new    运算符申请数组时,初始化值需要在  []  后面加上  ()  ,如果不加,初始值不确定,但是Linux下是0





    引用作为函数返回值
           1)不能返回局部变量的引用。
    int& func()
    {
          int x=10;
          return x;
    }

           2)不能返回函数内部new分配的内存的引用。例如,被函数返回的引用只是作为一个临时变量出现,而没有被赋予一个实际的变量,那么这个引用所指向的空间(由new分配)就无法释放,造成memory leak(内存泄露)。
    //不要轻易返回堆空间的对象的引用
    ostream &operator<<(ostream &output, const data &aaa) 
         output << aaa.x << ' ' << aaa.y << ' ' << aaa.z << endl; 
         return output; 
    }

    int& abc(int a, int b, int c, int& result)
    {
               result = a + b + c;
               return result;
    }
    void swap(int x,int y);        //发生的是值传递,拷贝
    void swap(int* x,int* y);      //发生的是地址传递,本质是值传递
    void swap(int &x,int &y);      //在函数传参时,不需要进行复制,直接操作实参本身,减少复制开销,提高执行效率


    引用与指针的相同点:
        都有地址的概念(引用底层实现是指针)

    引用与指针的区别:
    1. 引用不能为空,指针可以为NULL
    2. 引用必须要初始化, 指针不一定
    3. 引用一经绑定到某个变量,之后就不能再修改其指向;
       指针没有这个限制



    C++类型转换:
    1、隐式转换                                                                                                               2、显示转换
    double b=3.14159;
    int d=(int)b;
    double b=3.14159;
    int d=static_cast<int>(b);
    //const_cast/dynamic_cast(父子类)//reinterpret_cast





    C++支持函数重载
        实现原理:名字改编(name mangling)
        当函数名称相同时,会根据形参的个数,类型,顺序来进行名字改编
    //对源文件只进行编译,得到目标文件 .o  可以使用 nm .o文件 命令进行查看





    C与C++混合编程
    extern "C"  //表示包含在该区域的内容是以C语言的方式进行调用
    extern "C"
    {
              int add(int a,int b)
              {
                    return a+b;
              }
    }
                          




    默认参数或者缺省参数的赋值只能从右到左进行
    int add(int a,int b=0);   //传参缺省的参数可以不穿,执行默认为=0;  如果还定义了 int add(int a) 要报错,构不成重载,两个函数一样的
    int add(int a,int b,int c=0);





    bool类型
        占一个字节,bool a=100,  a=1;   bool b=0, b=0;


    const vs #define
    (1) 编译器处理方式不同
                   define宏是在预处理阶段展开。
            const常量是编译运行阶段使用。
    (2) 类型和安全检查不同
                    define宏没有类型,不做任何类型检查,仅仅是展开。
            const常量有具体的类型,在编译阶段会执行类型检查。
    注意:尽量以const替换#define




  • 相关阅读:
    *Reverse Linked List II
    *Insertion Sort List
    Convert Sorted List to Binary Search Tree
    Reverse Integer
    read cache return null
    纳秒和随机数
    libthread_db
    gdb
    tls session resumption
    http://www.linux-commands-examples.com/xmllint
  • 原文地址:https://www.cnblogs.com/meihao1203/p/8714585.html
Copyright © 2011-2022 走看看