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




原文地址:https://www.cnblogs.com/meihao1203/p/8714585.html