C++基础知识点整理笔记(三)

C++11引入了诸如auto类型推导、范围for循环、lambda函数等新特性,增强了编程效率和代码清晰度。externC用于在C++中调用C编译的函数,解决名称匹配问题。调试方面,Windows上的VS和Linux上的GDB提供了不同的调试体验,如VS的图形界面和GDB的命令行操作。
摘要由CSDN通过智能技术生成

7. C++11的新特性

  • auto类型推导:让编译器通过初值推断变量的类型(auto定义的变量必须要有初始值),编译时对变量进行了类型推导,所以不会对程序的运行效率造成不良影响。
  • 范围for循环:遍历给定序列的每个元素并对序列中的每个值执行某种操作。
  • lambda函数:用于定义并创建匿名的函数对象,以简化编程工作。
  • Override:override关键字保证了派生类中声明重写的函数与基类虚函数有相同的签名,可避免一些拼写错误
  • final 关键字:final限定某个类不能被继承或某个虚函数不能被重写。空指针常量nullptr消除NULL的二义性问题。因为c++中NULL就是0,0 既可以表示整型,也可以表示一个空指针(void *)。nullptr有类型,且可以被隐式转换为指针类型。
  • 线程支持、智能指针、容器初始化、变长参数模板tuple等

8. 在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”

  • 首先,extern是C/C++语言中表明函数和全局变量作用范围的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明。
  • extern "C"是连接申明(linkage declaration),被extern "C"修饰的变量和函数是按照C语言方式编译和连接的。
  • 作为一种面向对象的语言,C++支持函数重载,而过程式语言C则不支持。函数被C++编译后在符号库中的名字与C语言的不同。例如,假设某个函数的原型为:void foo( int x, int y);该函数被C编译器编译后在符号库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字。这样的名字包含了函数名、函数参数数量及类型信息,C++就是靠这种机制来实现函数重载的。
  • 所以,可以用一句话概括extern “C”这个声明的真实目的:解决名字匹配问题,实现C++与C的混合编程。

9. vs调试和gdb调试

  • Windows上通过vs直接在代码上调试,在Linux上通过gdb在控制台上输入调试命令调试,可以通过多次命令:"l" 来将所要调试的代码显示到控制台,然后看着代码调试。
  • vs中可以通过鼠标点击来下断点,而gdb是通过命令“b num”来下断点,其中b是命令,num是需要下断点的行数。
  • 一步一步的调试, 在vs中有点击的图标,gdb中通过命令:"r" 让代码执行到你下的第一个断点,命令:"c"让代码执行到下一个断点。
  • 到断点后还需要一步一步的执行,gdb中命令:"n" 让代码一步一步的执行,一个命令执行一步。
  • 碰到需要调用的函数时,命令"n"不能进入函数,gdb中命令:"s" 来进入函数内部执行
  • 代码调试跑起来后,需要观察每次运行代码想要查看的值,gdb中使用命令:“p val”p是查看的命令,val是我们需要查看的变量,p &val,查看变量地址,p *ptr@len 通过指向数组的指针显示数组所有的元素,ptype val 显示变量的类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值