C++ 的加强主要表现在:类型的加强、面向对象支持
1、变量定义
C++更强调语言的实用性,所有的变量都可以再需要使用的时候再定义,C语言中的变量都必须在作用域开始的位置定义
int c = 0;for (int i = 1; i < 3; i++){ for (int j = 1; j < 3; j++) { c += i * j; }}
register 关键字请求编译器将局部变量存储与寄存器中
- 在C++中依然支持
register
关键字C++ 编译器有自己的优化方式
- C语言中无法获取
register
变量的地址- C++中可以取得
register
变量的地址C++编译器发现程序中需要取
register
变量的地址时,register
对变量的声明变得无效早期的C语言编译器不会对代码进行优化,因此
register
变量是一个很好的补充
2、同名变量
在C语言中,重复定义多个同名的全局变量是合法的,多个同名的全局变量最终会被链接到全局数据区的同一个地址空间上。
在C++中,不允许定义多个同名的全局变量。
3、struct
关键字的加强
C语言中的struct定义了一组变量的集合
C语言中的struct定义的标识符并不是一种新的类型
C++中的struct用于定义一个全新的类型
// C语言typedef struct _tag_student Student; // 将struct _tag_student类型起了一个别名Studentstruct _tag_student{ const char * name; int age;}// C++// struct定义一个全新的类型struct Student{ const char * name; int age;};
4、小思考
int f()
与int f(void)
的区别:有没有区别,要看用什么编译器
- 如果用C语言编译器,
int f()
的函数类型是返回值为int
,接收参数是任意个数参数;int f(void)
表示返回值为int
,不接收任何参数 - 在C++中,这两种写法没有区别,都表示返回值为
int
,不接收任何参数
5、默认类型
C++中所有的标识符都必须显示地声明类型
C语言中地默认类型在C++中是不合法的
f(i){ printf("i = %d\n", i);}g(){ return 5;}
在C语言中:
-
int f()
表示返回值为int
, 接收任意参数的函数 -
f(void)
表示返回值为int
的无参函数
在C++中:
-
int f()
和int f(void)
具有相同的意义,表示返回值为int
的无参函数
C++中无默认类型,如果没有参数,就是不接受任何参数,int f(void)
只是为了兼容C语言
C++ 不接受无返回值类型的函数,不允许默认类型
#include// c++中,定义了一个新的类型Studentstruct Student{ const char* name; int age;};// C++中有问题,不合法f(i){ printf("i = %d\n", i);}// C++不合法g(){ return 5;}int main(int argc, char *argv[]){ Student s1 = {"Delphi", 30}; Student s2 = {"Tang", 30}; f(10); printf("g() = %d\n", g(1,2,3,4,5)); return 0;}
6、总结
C++更强调实用性,可以在任意的地方声明变量C++中的register只是一个兼容C的作用
C++编译器能够更好地进行优化
C++中地任意标识符都必须显示地指明类型