--事物的难度远远低于对事物的恐惧!
现在正式进入C++的世界,大家安全带系好,马上发车了!
这一章节来聊一聊C到C++的升级,我们来回顾下上一章节《学习C++的意义》的内容,我们知道,C++是一种加强版的C语言,兼容了C的特性,同时也提供了更为先进的软件设计方法:面向对象的设计方法。除此之外,C++还提供了更多的语法和特性,完美兼顾了开发效率与运行效率,可谓是青出于蓝而胜于蓝!
C到C++的升级主要体现在:
1、C++的变量可在使用时定义,而C必须在代码作用域的开头处定义
for(int i=0; i<10; i++) //循坏条件中的i,在C++中,可在使用时再定义,而C语言则不能。
{
//your code...
}
2、C++与C一样,register关键字都会请求编译器将局部变量存储于寄存器中(这是为了兼容C语言),区别在于:C语言不能取register变量的地址;而现代C++编译器会做相应优化,使得C++可以取得register变量的地址,但实际上C++代码中极少看见register关键字,仅仅是为了兼容C语言而已。
3、C语言中可以定义多个重复的全局变量,这些重复的变量最终会被链接到全局数据区的同一个地址空间上;而C++中不允许定义多个重名的全局变量,直接拒绝这种二义性做法。
4、struct关键字在C++中用于定义一种全新的类型,而在C中,struct只是定义一组变量的集合,并不是一种新的类型。请看如下的代码,看看对于使用Student,哪个更加简洁?
//C语言中的做法
typedef struct _student Student
struct _student
{
const char* name;
int age;
}
//C++中的做法
struct Student
{
const char* name;
int age;
}
5、C++中所有的标识符都必须显示的声明类型,C语言中的默认类型在C++中是不合法的。
思考一下:int f()、int f(void)、f(void)三者有区别吗?如果有,那么区别是什么?
C语言中:
-int f()表示返回值为int,接受任意参数的函数
-int f(void)表示返回值为int的无参函数
-f(void)表示返回值默认为int类型的无参函数
C++语言中:
-int f()表示返回值为int的无参函数
-int f(void)表示返回值为int的无参函数(以上一个相同)
-f(void) //不合法,因为不支持返回值为默认参数的函数
如下代码,想想在C中编译与在C++中编译,情况一样吗?
#include <stdio.h>
struct Student //C中编译出错,C++编译通过
{
const char* name;
int age;
};
f(i) //C中编译通过,C++编译不通过
{
printf("i = %d\n", i);
}
g() //C中编译通过,C++编译不通过
{
return 5;
}
int main(int argc, char *argv[])
{
Student s1 = {"zhangsan", 30}; //C中OK, C++中error
Student s2 = {"lisi", 30}; //C中OK, C++中error
f(10); //C中OK, C++中error
printf("g() = %d\n", g(1,2,3,4,5)); //C中OK,C++中error
return 0;
}
总结:
1、C++实用性更加强大,可以在任意地方声明变量,也可以在使用时再声明
2、C++中的register只起到兼容C的作用,实际C++开发中很少遇见到
3、C++编译器能够更好的优化
4、C++中的任意标识符都必须显示的指明类型
好了,本章内容就先写到这