C和C++的不同之处
C 和 C++ 之间的相似点:
- 两种语言的语法相似。
- 两种语言的代码结构相同。
- 两种语言的编译过程类似。
- 它们共享相同的基本语法。几乎所有C的运算符和关键字在C++中也存在,并且作用相同。
- C++的语法相比C稍微扩展,但基本语法相同。
- 两者的基本内存模型都非常接近硬件。
- 两种语言中都存在相同的堆栈、堆、文件作用域和静态变量的概念。
C 和 C++ 之间的不同点:
- C++通常被视为C的超集。C++也被称为“带类的C”。这一点在C++最初创建时几乎是正确的,但随着时间的推移,两种语言都发生了变化,C添加了许多在当时的C++版本中找不到的特性,或者仍未出现在任何版本的C++中。尽管如此,C++仍然主要是C的超集,增加了面向对象编程、异常处理、模板编程和更广泛的标准库。
以下是C和C++之间一些更明显和一般的区别的表格。语言及其版本之间还有许多更微妙的差异。
C | C++ |
---|---|
C由Dennis Ritchie于1969年至1973年间在AT&T Bell Labs开发。 | C++由Bjarne Stroustrup于1979年开发。 |
C不支持多态、封装和继承,这意味着C不支持面向对象编程。 | C++支持多态、封装和继承,因为它是一种面向对象编程语言。 |
C(主要)是C++的子集。 | C++(主要)是C的超集。 |
C中的关键字数量: * C90: 32 * C99: 37 * C11: 44 * C23: 59 | C++中的关键字数量: * C++98: 63 * C++11: 73 * C++17: 73 * C++20: 81 |
C支持过程式编程。 | C++被称为混合语言,因为C++支持过程式和面向对象编程范式。 |
数据和函数在C中是分开的,因为它是一种过程式编程语言。 | 数据和函数在C++中被封装在对象中。 |
C不支持信息隐藏。 | 数据通过封装进行隐藏,以确保数据结构和操作符按预期使用。 |
C支持内置数据类型。 | C++支持内置和用户定义的数据类型。 |
C是一种函数驱动的语言,因为C是一种过程式编程语言。 | C++是一种面向对象的语言,因为它是面向对象编程的。 |
C不支持函数和运算符重载。 | C++支持函数和运算符重载。 |
C是一种函数驱动的语言。 | C++是一种面向对象的语言。 |
C中的函数不能定义在结构体内部。 | C++中的函数可以在结构体内部使用。 |
C中没有命名空间功能。 | C++使用命名空间来避免名称冲突。 |
标准输入输出头文件是stdio.h。 | 标准输入输出头文件是iostream.h。 |
C不支持引用变量。 | C++支持引用变量。 |
C不支持虚函数和友元函数。 | C++支持虚函数和友元函数。 |
C不支持继承。 | C++支持继承。 |
C关注的是方法或过程,而不是数据。 | C++关注的是数据,而不是方法或过程。 |
C提供了malloc()和calloc()函数用于动态内存分配,并使用free()进行内存释放。 | C++提供了new操作符用于内存分配,并提供了delete操作符用于内存释放。 |
C不直接支持异常处理。 | C++支持异常处理。 |
scanf()和printf()函数用于C中的输入/输出。 | cin和cout用于C++中的输入/输出。 |
C结构体没有访问修饰符。 | C++结构体有访问修饰符。 |
C编程语言中没有严格的类型检查。 | C++中进行严格的类型检查。因此,许多在C编译器中运行良好的程序在C++编译器中会产生许多警告和错误。 |
C不支持重载。 | C++支持重载。 |
C99及以后的版本允许使用联合体进行类型混淆。 | 类型混淆使用联合体在C++中是未定义行为(除非在非常特定的情况下)。 |
命名初始化器可以无序出现。 | 命名初始化器必须与结构体的数据布局匹配。 |
文件扩展名是“.c”。 | 文件扩展名是“.cpp”或“.c++”或“.cc”或“.cxx”。 |
元编程:宏 + _Generic() | 元编程:模板(宏仍然受支持但不推荐使用)。 |
C中有32个关键字。 | C++中有97个关键字。 |