C与C++区别

前言

C++是C的超集,也可以说C是C++的子集。按常理说,C++编译器能够编译任何C程序

C是面向过程的语言。C++是面向对象的语言,具有封装、继承、多态三大特性。

C++增加了C不具有的关键字,如private、template、new等。这些关键字能作为函数和变量的标识符在C程序中使用,尽管C++包含了所有的C,但显然没有任何C++编译器能编译这样的C程序。

C程序员可以省略函数原型,而C++不可以,一个不带参数的C函数原型必须把void写出来。而C++可以使用空参数列表。

C++中new和delete是对内存分配的运算符,取代了C中的malloc和free。

在C语言中,输入输出是使用语句scanf()和printf()来实现的,而C++中是使用类来实现的。cin,cout,endl对象,他们本身并不是C++语言的组成部分。虽然他们已经是ANSI标准C++中被定义,但是他们不是语言的内在组成部分。在C++中不提供内在的输入输出运算符,这与其他语言是不同的。输入和输出是通过C++类来实现的,cin和cout是这些类的实例,他们是在C++语言的外部实现。

标准C++中的字符串类取代了C标准C函数库头文件中的字符数组处理函数(C中没有字符串类型)。

C++中用来做控制态输入输出的iostream类库替代了标准C中的stdio函数库。

C++中的try/catch/throw异常处理机制取代了标准C中的setjmp()和longjmp()函数。

1. 宏与模板

C:宏定义
C++:模板
在C++中用模板来代替C当中的宏定义。模板不同于宏的文字替换,在编译时会得到更全面的编译器检查,便于编写更健全的代码。利用inline关键字还能获得编译器的充分优化。模板特性在C++11后支持了可变长度的模板参数表,可以用来替代C中的可变长度函数并保证类型安全

2. 指针与引用

C:指针
C++:引用&
C++当中仍然可以使用C风格的指针,但对于变量传递而言,更推荐使用C++的引用特性来实现类似功能。引用指向对象不能为空,可避免一些空地址访问的问题。但指针由于其灵活性,仍然有用武之处。
值得一提的是,C中的NULL空指针在C++11起有类型安全的替代品nullptr。引用和指针间可通过*和&运算符互相转换

3. struct

C++中的struct和C中的struct不能混用。
C中的struct用来描述一种固定的内存组织结构。而C++中的struct就是一种类,它与类的唯一区别就是它的成员和继承行为默认都是public的,而一般类的默认成员是private
另外,声明struct时C繁琐,C++更简洁
C版本:

typedef struct Node_t{
    struct Node_t *next;
    int key;
} Node;

C++版本:

struct Node {
  Node *next;
  int key;
};

4. const

C:const只有限定变量不能修改的功能
C++:由于大量新特性的出现,const 被赋予的更多用法。被常量修饰符 const 修饰的对象或类型都是只读量,只读量的内存存储与一般变量没有任何区别,但是编译器会在编译期进行冲突检查,避免对只读量的修改。因此合理使用 const 修饰符可以增加代码健壮性。
C++中const用法详解:传送门

5. 内存分配

C:malloc()realloc()free()
C++:new()delete()
C++中新增new()delete()关键字用来在“自由存储区”上分配空间,这个自由存储区可以是堆也可以是静态存储区,他们是为了配合“类”出现的。其中delete()还能直接释放动态数组的内存,非常方便。new()delete()关键字会调用类型的构造函数和析构函数,相比C中的malloc()free()函数,它们对类型有更完善的支持,但是效率不如C中的这些函数

如果需要动态分配内存的对象是基础类型或它们的数组,可以使用malloc()进行更高效率的内存分配
如果新建的对象是非基础类型的,建议使用new以获得安全性检查。尽管newmalloc返回的都是指针,但new出来的指针只能用delete回收,而malloc出来的指针只能用free回收,否则会有内存泄露风险

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值