最近要刷题,重温一下C++基本的概念。。。233

1.概念:

C++ 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。

C++ 被认为是一种中级语言,它综合了高级语言和低级语言的特点。

和C的区别:

C++的很多基础语法跟C差不多。

2. 函数默认值:

C89标准的C语言不支持函数默认值,C++支持函数默认值,且需要遵循从右向左赋初始值。

3.函数重载:

C语言不存在函数重载,C++根据函数名参数个数参数类型判断重载,属于静多态,必须同一作用域下才叫重载。 C不有是因为编译器在编译的时候只会给函数重命名,所以在编译器看来重载函数们都是一样的(编译器不知道该调用哪个)。C++的重载函数们生成的符号表是不一样的(根据返回类型和参数类型数量等区分),所以可以搞函数重载.

4.const:

C中的const叫只读变量,只是无法做左值的变量;C++中的const是真正的常量,但也有可能退化成c语言的常量,默认生成local符号。

5.分配内存:

a. malloc()和free()是C语言中动态申请内存和释放内存的标准库中的函数。而new和delete是C++运算符。new和delete底层其实还是调用了malloc和free。

b. malloc时需要指定大小,还需要类型转换。new时不需要指定大小因为它可以从给出的类型判断,并且还可以同时赋初始值。(这也使得malloc不安全)

c. free只释放空间,delete先调用析构函数再释放空间(如果需要).同理,new也是先调用构造函数再申请空间。

d. 内存不足(开辟失败)时处理方式不同。malloc失败返回0,new失败抛出bad_alloc异常。

e. new和malloc开辟内存的位置不同。malloc开辟在堆区,new开辟在自由存储区域。

6.作用域:

多了个名字空间(namespace),所谓名字空间就是namespace,我们定义一个名字空间就是定义一个新作用域。

7.布尔常量:

布尔常量共有两个,它们都是标准的 C++ 关键字:

True 和 false,顾名思义就是对与错。

(C里面都是让程序员自己定义)

8.Lambda 函数:

C++11 提供了对匿名函数的支持,称为 Lambda 函数(也叫 Lambda 表达式)。

Lambda 表达式把函数看作对象。Lambda 表达式可以像对象一样使用,比如可以将它们赋给变量和作为参数传递,还可以像函数一样对其求值。

Lambda 表达式本质上与函数声明非常类似。

表达式例子:

[capture](parameters)->return-type{body}

[capture]:捕捉列表。捕捉列表总是出现在 lambda 表达式的开始处。事实上,[] 是 lambda 引出符。编译器根据该引出符判断接下来的代码是否是 lambda 函数。捕捉列表能够捕捉上下文中的变量供 lambda 函数使用。

(parameters):参数列表。与普通函数的参数列表一致。如果不需要参数传递,则可以连同括号 () 一起省略。

mutable:mutable 修饰符。默认情况下,lambda 函数总是一个 const 函数,mutable 可以取消其常量性。在使用该修饰符时,参数列表不可省略(即使参数为空)。

->return_type:返回类型。用追踪返回类型形式声明函数的返回类型。出于方便,不需要返回值的时候也可以连同符号 -> 一起省略。此外,在返回类型明确的情况下,也可以省略该部分,让编译器对返回类型进行推导。

{statement}:函数体。内容与普通函数一样,不过除了可以使用参数之外,还可以使用所有捕获的变量。 在 lambda 函数的定义式中,参数列表和返回类型都是可选部分,而捕捉列表和函数体都可能为空。

例子如下:

[](int x, int y){ return x < y ; }

[](int x, int y) -> int { int z = x + y; return z + x; }

其实也不是很玄乎,匿名函数本质上就是个随手用的函数,省去了定义的麻烦,直接用完就丢。也可以作为传递给某些应用,比如消息处理。

9.输入输出:

引用:https://www.runoob.com/cplusplus/cpp-basic-input-output.html

下一章讲最重要的面对对象编程部分。

最新文章

  1. apache 开机自启动脚本设置
  2. Hibernate —— Entity.hbm.xml
  3. 设置只为View加一条边框,子视图大小超出父视图大小,边框在子视图下边显示
  4. 【Android - 框架】之XBanner的使用
  5. sql日期
  6. code_smith生成实体类
  7. 个人从源码理解JIT模式下angular编译AppModule的过程
  8. JavaScript中的三种弹出对话框
  9. JMeter的介绍和简单使用
  10. LeetCode算法题-Array Partition I(Java实现)
  11. windows下VMware-workstation中安装CentOS
  12. c++基本数据类型及其取值范围
  13. laravel 创建自动化生成数据库
  14. hibernate 中,出现了错误 &quot;node to traverse cannot be null!&quot; 如何改正
  15. SWIFT解析天气JSON格式
  16. 前端-CSS-11-Z-index
  17. Activity-fragment-ListView展示
  18. 分布式理论基础(一)一致性及解决一致性的两种方式:2PC和3PC (转载 不错)
  19. Windows 7防火墙阻止了远程桌面连接的解决方法
  20. 20145310 《Java程序设计》第8周学习总结

热门文章

  1. sync.Map与Concurrent Map
  2. QJsonObject与QString转化封装
  3. 解决brew update很慢
  4. 如何通过RMAN使用传输表空间迁移到不同的Endian平台 (Doc ID 371556.1)
  5. platform平台device和driver如何匹配【转】
  6. RabbitMQ学习笔记(七、RabbitMQ实战)
  7. 并发编程实战之并发下的socket套接字编程
  8. 《细说PHP》第四版 样章 第23章 自定义PHP接口规范 5
  9. Unity 利用Cinemachine快速创建灵活的相机系统
  10. 【Oracle命令 】使用的sql语句之分组查询(group by)