优秀的编程知识分享平台

网站首页 > 技术文章 正文

C++和C的比较(c++与c的差别)

nanyue 2024-08-19 19:09:24 技术文章 5 ℃

1.函数声明

函数原型声明中都可以省略参数名称,只保留类型名称。

2.空参数和可变参数

(a)func() C++中表示没有参数,C语言中表示参数不确定,表示没有参数是:func(void)

(b)关于可变参数(二者一样)

int func(int a, ...)参数的类型与个数都不确定

3.返回值

C中声明函数可以不写返回值类型,默认为int main(){ },而C++声明函数必须有返回值类型,如果没有返回值类型,则用void声明。

4.true和false(布尔型型数据)

在C语言中两者都不是关键字,非零即true,在C++中是关键字,但不能用以下方式比较:

if ( a == true){...},因此,尽管C++拥有布尔型变量,但由于与C语言兼容,仍然不能直接对一个布尔型变量做对比操作。

5.作用域

C语言强制一个函数中所有变量在函数开始时就要全部定义,变量的作用域就是整个函数。 C++可以在任意位置定义变量。

6.C++中增加了引用类型

主要应用在参数的传递过程中,引用只能初始化,不可另外赋值。void类型没有引用。

7.register关键字的变化

(1)register关键字请求“编译器”将局部变量存储于寄存器中,C语言中无法取得register变量地址,而在C++中依然支持register关键字。

(2)C++编译器有自己的优化方式,不使用register也可能做优化。C++中可以取得register变量的地址。C++编译器发现程序中需要取register变量的地址时,register对变量的声明变得无效。

8.全局变量的定义

(1)在C语言中,重复定义多个同名的全局变量是合法的,在C++中,不允许定义多个同名的全局变量。

(2)C语言中多个同名的全局变量最终会被链接到全局数据区的同一个地址空间上,C++直接拒绝这种二义性的做法。

9.对const常量的处理

(1)当遇见常量声明时在符号表中放入常量。

(2)编译过程中若发现使用常量则直接以符号表中的值替换,编译过程中若发现对const使用了extern或者&操作符,则给对应的常量分配存储空间。

【注意】

C++编译器虽然可能为const常量分配空间,但不会使用其存储空间中的值。C语言中const变量是只读变量,有自己的存储空间。

C++中的const常量,可能分配存储空间,当const常量为全局,并且需要在其它文件中使用。

当使用&操作符取const常量的地址

10.引用

在C++中可以使用引用实现数值交换,而在C语言中没有此语法,例如:

void swap(int& a, int& b)

{

int temp = a;

a = b;

b = temp;

}

最近发表
标签列表