某日小二参加XXX科技公司的C++高级工程师开发岗位1面:

面试官:请问C和C++的区别有哪些?

小二:C++是C的超集。

面试官:还有吗?

小二:...

面试官:面试结束,回去等消息吧。

小二:淦。

小二的答案对吗?

实际上这句话是有问题的,严格的说,C语言和C++有很多交集,这部分交集占了C语言的大部分,占了C++的小部分。

畅销C++书籍作者侯杰老师曾说过,当我们谈论C++的时候,其实在谈论四个方面的东西;

1.面向过程的编程语言
2.面向对象的编程语言
3.STL(Standard Template Library,标准模板库)
4.元编程

其中,只有第一条面向过程的编程语言和C语言的定位重合。

那么我们很容易得出结论,C++独有的功能和特性包括面向对象的编程范式,STL和元编程。那么C中有的,而C++中没有的这部分是什么呢?

主要包含一些语法细节的变动,C++在考虑到安全性、易用性、功能完整性等一系列问题后的实现与C语言现有的实现不同的地方,以下列出一些,并不是完整列表:

1.编译器类型大小不同

如C语言的单个字符编译时占用4个字节,而C++只占用一个字节。

如空结构体在C语言中的大小是0,而在C++中的大小是1。

2.类型检查尺度不同

如C语言中的main函数的返回值可以是任何类型,但在C++中main函数的返回值只能是int类型。

如C语言中从void*转换成任意类型的指针,而C++中必须使用强制转换符。

3.关键字相同但使用不同

如const,auto。

那么回到开头,让我们重新模拟一编开头的面试环节:

面试官:请问C和C++的区别有哪些?

小二:C是面向过程的编程语言,而C++不仅是面向过程的编程语言,还是面向对象的编程语言。同时C++包含了C中所没有的STL,且C++支持函数是编程/泛型编程/元编程。

面试官:还有吗?

小二:C++号称是C的超集,其实大部分时间这句话是对的,但还有一些细微的点C++是不能兼容C语言的,如balabalabala...

面试官:面试结束,请注意保持手机畅通。

小二:好。

C++面试八股文:C和C++有哪些区别?的更多相关文章

  1. 《面试八股文》之kafka21卷

    微信公众号:moon聊技术 关注选择" 星标 ", 重磅干货,第一 时间送达! [如果你觉得文章对你有帮助,欢迎关注,在看,点赞,转发] 大家好,我是moon,最新一篇面试八股文系 ...

  2. 《面试八股文》之 Redis 16卷

    微信公众号:moon聊技术 关注选择" 星标 ", 重磅干货,第一 时间送达! [如果你觉得文章对你有帮助,欢迎关注,在看,点赞,转发] 大家好,我是 moon. redis 作为 ...

  3. 《面试八股文》之 JVM 20卷

    微信公众号:moon聊技术 关注选择" 星标 ", 重磅干货,第一 时间送达! [如果你觉得文章对你有帮助,欢迎关注,在看,点赞,转发] 大家好,我是 moon. <面试八股 ...

  4. 这可能是最全面的TCP面试八股文了

    计算机网络基础,考验一个程序员的基本功,也能更快的筛选出更优秀的人才. 说说TCP的三次握手 假设发送端为客户端,接收端为服务端.开始时客户端和服务端的状态都是CLOSED. 第一次握手:客户端向服务 ...

  5. 一天吃透MySQL面试八股文

    什么是MySQL MySQL是一个关系型数据库,它采用表的形式来存储数据.你可以理解成是Excel表格,既然是表的形式存储数据,就有表结构(行和列).行代表每一行数据,列代表该行中的每个值.列上的值是 ...

  6. 一天吃透JVM面试八股文

    什么是JVM? JVM,全称Java Virtual Machine(Java虚拟机),是通过在实际的计算机上仿真模拟各种计算机功能来实现的.由一套字节码指令集.一组寄存器.一个栈.一个垃圾回收堆和一 ...

  7. 这可能是最全面的MySQL面试八股文了

    什么是MySQL MySQL是一个关系型数据库,它采用表的形式来存储数据.你可以理解成是Excel表格,既然是表的形式存储数据,就有表结构(行和列).行代表每一行数据,列代表该行中的每个值.列上的值是 ...

  8. 这可能是最全面的Redis面试八股文了

    Redis连环40问,绝对够全! Redis是什么? Redis(Remote Dictionary Server)是一个使用 C 语言编写的,高性能非关系型的键值对数据库.与传统数据库不同的是,Re ...

  9. 三天吃透Spring面试八股文(最新整理)

    本文已经收录到Github仓库,该仓库包含计算机基础.Java基础.多线程.JVM.数据库.Redis.Spring.Mybatis.SpringMVC.SpringBoot.分布式.微服务.设计模式 ...

  10. 三天吃透Java虚拟机面试八股文

    本文已经收录到Github仓库,该仓库包含计算机基础.Java基础.多线程.JVM.数据库.Redis.Spring.Mybatis.SpringMVC.SpringBoot.分布式.微服务.设计模式 ...

随机推荐

  1. flutter ui---->一些类QQ的实现

    整理一下比较有意思的类QQ的UI实现.Nothing that has meaning is easy. Easy doesn't enter into grown-up life. darken t ...

  2. react中类组件、函数组件、state、单层遍历、多层遍历、先遍历后渲染、if-else、三目运算符

    1.回顾 module.exports = { entry: {}, output: {}, plugins: [], module: {}, resolve: {}, devServe: {} } ...

  3. ACM-NEFU-2020大一寒假培训三(暴力)

    A.二倍的问题 Description 给定2到15个不同的正整数,你的任务是计算这些数里面有多少个数对满足:数对中一个数是另一个数的两倍.比如给定1 4 3 2 9 7 18 22,得到的答案是3, ...

  4. 二进制安装Kubernetes(k8s) v1.23.6

    二进制安装Kubernetes(k8s) v1.23.6 背景 kubernetes二进制安装 1.23.3 和 1.23.4 和 1.23.5 和 1.23.6 文档以及安装包已生成. 后续尽可能第 ...

  5. python语法的入门

    1.变量 1.1: 底层原理:现在内存空间申请一块地址来储存变量值, 然后把申请的内存地址跟变量名绑定在一起 之后只需通过访问变量名就可以获取变量值 1.2:一个变量名只能指向一个内存地址,但是一个内 ...

  6. visio秘钥

    一.Visio2016专业版永久激活码: Visio 2016 Professional Retail零售版 [Key]:NKVJM-8MTT4-8YDFR-6738M-DPFJH [Key]:W9W ...

  7. CRC(Cyclic Redundancy Check)

    CRC(循环冗余校验) [参考资料] https://en.wikipedia.org/wiki/Cyclic_redundancy_check https://wiki.segger.com/CRC ...

  8. 笔记九:线程间的通信(pthread_create()和pthread_self())

    linux高级编程之线程间的通信:(pthread_create().pthread_self()) 1.线程概念        线程包含了表示进程内执行环境必须得信息,其中包括进程中标识线程的线程I ...

  9. Python 字典定义

    字典 能将相关信息关联起来 可存储的信息几乎不受限制 # 案例1 alien_0 = {'color':'green','points':5} print(alien_0['color']) prin ...

  10. 浅谈ArrayList和LinkedList

    文章目录 前言 ArrayList和LinkedList List的方法 ArrayList add remove LinkedList remove get和peek push ArrayList和 ...