C语言和C++区别到底在哪?

作为一个即用过C,也用过C++的人来说,不一定能说出它俩错综复杂的关系。小编也是略懂一二。

简单来说:

  • C++是C发展来的。
  • C++是面向对象的语言,而C是结构化的语言(面向过程)。
  • C的大部分代码在C++上都能应用,而C++的代码在C上不能应用。(记住是大部分,不是所有)

具体来说:

C语言是一个结构化语言,它的重点在于算法与数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事物)控制)。C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事物)控制。所以C语言和C++的最大区别在于它们解决问题的思想方法不一样。

C语言主要用于嵌入式领域,驱动开发等与硬件直接打交道的领域,C++可以用于应用层开发,用户界面开发等于操作系统打交道的领域。

C++对C的“增强”,表现在几个方面:

(1) 类型检查更为严格。

(2) 增加了面向对象的机制。

(3) 增加了泛型编程的机制(Template)。

(4) 增加了异常处理。

(5) 增加了运算符重载。

(6) 增加了标准模板库(STL)。

(7)增加了命名空间,避免全局命名冲突。

与C不兼容之处

上面说了C的大部分代码在C++上都能run的溜溜的,但是也有少数C代码会在C++中失效,或者在C++中有不同的行为。例如:隐式转换。

1).最常见的差异之一是,C允许从void*隐式转换到其它的指针类型,但C++不允许。下列是有效的C代码:

//从void*类型隐式转换为int*类型

int*i=malloc(sizeof(int)*5);

但要使其在C和C++两者皆能运作,就需要使用显式转换:

int*i=(int*)malloc(sizeof(int)*5);

2).在C中,多次声明一个全局变量虽然不可取,但不算错.在C++中,多次声明同一个全局变量会引发错误.

3).另一个常见的可移植问题是,C++定义了新关键字,例如如new,class,它们在C程序中可以作为识别字(例:变量名)的。

在C标准(C99)中去除了一些不兼容之处,也支持了一些C++的特性,如//注解,以及在代码中混合声明。不过C99也纳入几个和C++冲突的新特性(如:可变长度数组、原生复数类型和复合逐字常数)。

4).若要混用C和C++的代码,则所有在C++中调用的C代码,必须放在 extern "C" { /* C代码 */ } 内。

在你使用过程中遇到的问题可能比这里讲的要多,没关系,你只要记住没有一个程序员不是从问题堆里走出来的就行了。

讲了这么多,是不是对C和C++有了更深刻的了解。两者各有长处,各有缺点,其实就看你在哪个领域去用它。

原文发布于微信公众号 - 程序员互动联盟(coder_online)

原文发表时间:2015-09-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

国家认证的Python工程师有什么能力要求?

Python这门语言近来是越来越火,在国家层面越来越被重视。除了之前热议的加入高考和中小学教育之外,现在连普通大学生也无法逃脱Python的毒手了。

2750
来自专栏机器学习算法与Python学习

资料 | Python的14张思维导图(可后台下载)

关键字全网搜索最新排名 【机器学习算法】:排名第一 【机器学习】:排名第一 【Python】:排名第三 【算法】:排名第四 来自:AI科技大本营 下载方式请见文...

3668
来自专栏姬小光

正则表达式是个啥

前些天有运营 MM 问小鸡君,正则表达式是个啥啊?懂技术的同学可能会想,你个运营管啥是正则表达式干啥?

672
来自专栏工科狗和生物喵

【我的漫漫跨考路】有生之年·调完了BUG--冒泡排序C++版本

正文之前 今天去牛客网试了试一些实战编程题,感觉贼有意思,但是也很难,挑了个成绩排序的算法题我就开始怼! 对我一个编程经验并不是很丰富的人来说,确实算是个挑战了...

3706
来自专栏机器之心

PyTorch为何如此高效好用?来探寻深度学习框架的内部架构

选自blog.christianperone 作者:Christian S. Perone 机器之心编译 参与:思源、黄小天、李泽南 作为 Facebook 人...

3776
来自专栏PPV课数据科学社区

【学习】《R实战》读书笔记(第四章)

读书会是一种在于拓展视野、宏观思维、知识交流、提升生活的活动。PPV课R语言读书会以“学习、分享、进步”为宗旨,通过成员协作完成R语言专业书籍的精读和分享,达到...

2965
来自专栏数据分析

[数据清洗]- Pandas 清洗“脏”数据(三)

预览数据 这次我们使用 Artworks.csv ,我们选取 100 行数据来完成本次内容。具体步骤: 导入 Pandas 读取 csv 数据到 DataFra...

4418
来自专栏AzMark

Python函数的介绍

1456
来自专栏Java学习网

影响Java调用性能有哪些因素

影响Java调用性能有哪些因素 当时发生了什么? 这得从一个小故事说起。我在一个Java核心库的邮件列表中提交了一个修改 ——重写了一些本是 final 的方法...

23510
来自专栏企鹅号快讯

教您最简单粗暴的MATLAB入门级爬虫2

感谢吴老师的《数据新闻与网络数据挖掘》课程 感谢各位捧场的小伙伴们 本文适用对象为编程零基础者 仅供学习交流使用,请勿用于商业用途。 通过这样的方法,可以类似得...

2226

扫码关注云+社区