c++杂记

1. c++ 调用c库函数

    由于c++要支持函数的重载,所以c++编译器在编译函数时,生成在符号表中的函数名,与函数定义时函数名和函数参数都有关系。如

int add(int x,int y){
   return x+y;
}

int add(int x,int y,int z){
   return x+y+z;
}

     这两个函数编译后生成的函数符号是不一样的,这一点可以通过导出符号表一看便知。但是c 语言却不支持函数重载,c编译器编译生成的函数符号,只于定义时的函数名称有关系。那么问题就来了,在使用c++时,如果要调用一个c库函数,如上面的add(1,2);如果用c++编译器直接编译,很明显很会链接时出错,因为无法在c库中找到对应的符号。解决这种情况的方式就是:

extern "C"{
  int add(int x,int y);
}

 使用 extern "C"{}来包含该函数的声明,这样c++ 编译 器就会使用c编译器的法则来编译你所使用的函数。

2. c++中的new

    c++ 中 new 关键字是用来动态分配内存的,与c中的malloc类似,但是二者又有一些差别:

    1. new 关键字是基于类型分配内存的,而malloc是基于字节分配的

    2. new 关键字是c++ 本身的一部分,而malloc需要库函数提供

    3. new 关键字分配的内存需要delete 来释放,malloc需要用free来释放

    4. new 关键字在申请内存分配时可以进行初始化操作,malloc不具备真正意义初始化功能

3. C++ 中初始化列表

    1. 初始化列表用于初始化对象的成员变量,先于构造函数执行。

    2. 使用const修饰的成员变量,只能使用初始化列表初始化。

    3. 初始化列表的执行顺序,与类中成员变量的申明顺序一致。

4. c++ 对象的构建顺序

    1. 局部对象的构建顺序,与程序的执行流有关,执行到创建对象的的语句时,才构建对象

    2. 多个全局对象的构建顺序是不确定性的,但是会在程序执行流之前,一般的如main函数之前

5. c++中临时对象

1. 代码中手动调用构造函数,将会产生一个新的对象, 当这个对象没有使用变量去接收的时候,那么这个对象只会在该行有效。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值