C与C++的关系
1、c++继承了所有的c特性
2、c++以C语言为基础,又增强了面向对象的支持,类型加强,函数加强,异常处理。
3、语言中的变量都必须在作用域开始的位置定义,c++可以在需要使用时再定义。
4、register关键字请求编译器将局部变量存储于寄存器中,但是编译器是可以拒绝的。c++编译器有自己的优化方式,变量也可能存储在寄存器中,所以c++中很少见register,只是为了兼容c语言而已。c语言中无法获取register变量的地址。c++可以取得register变量的地址。
5、c语言中可以定义多个同名的全局变量,C++中不允许定义多个同名的全局变量。
6、struct关键字的加强
c语言中的struct定义了一组变量的集合,并不是一种新的类型(如果要当成新的类型,需要用typedef关键字重命名一下)。c++在类型的加强后,把struct定义为一种全新的类型。
7、c++中所有的标识符都必须显示声明类型,不像c语言中的默认类型,c++则不支持默认类型,不允许不写函数返回类型。
一个小问题: int f()与 int f(void) 有区别吗?
c++中两个函数具有相同的意义,表示返回值为int的无参函数。c语言中两个函数则不一样,int f()表示返回值为int,接受任意参数的函数,而int f(void)则表示返回值为int的无参函数。
8、const关键字的进化
C语言中const修饰的变量是只读的,使得变量具有只读属性,本质还是变量,它修饰的局部变量还会在栈上分配空间,只在编译期有效,在运行期无效。特别的,const修饰的全局变量在只读存储区分配空间,因此修改了const修饰的全局变量将出现奔溃。const修饰的变量不是真的常量,它只是告诉编译器该变量不能出现在赋值符号的左边,所以const不能定义真正意义的常量。C语言中真正意义的常量只有枚举。通过指针可以修改const修改的变量值。
c++中当碰见const声明时在符号表中放入常量。编译过程中若发现使用常量则直接以符号表中的值替换。符号表是编译器在编译的过程中产生的数据结构。编译过程中若发现下述情况则给对应的常量分配存储空间:
(1)对const常量使用了extern,即当const常量为全局并且需要在其它文件中使用。(2)当使用 & 操作符对const常量取地址。
注意:c++编译器虽然可能为const常量分配空间,但不会使用其存储空间中的值。 原因是为了兼容C语言。
与宏的区别:const常量是由编译器处理,编译器对const常量进行类型检查和作用域检查(宏没有)。编译器中没有宏的概念,宏定义由预处理器处理,单纯的文本替换(字面量),没有类型检查和作用域概念。
const int *p=&x; 底层
int * const p=&x; 顶层
const int *const p=&x; 靠右的const是顶层,靠左的是底层const
9、c++中新增加了bool基础类型和引用
c++(类型增强和面向对象特性)在C语言的基本类型系统之上增加了bool类型(布尔类型),可取的值只有true和false,理论只上占用一个字节。true用1表示,false用0来表示。C语言中用int代替bool不严谨。
c++对三目运算符进行了升级,c语言中三目运算符返回的是变量值,不能当做左值来使用。c++中的三目运算符如果都是变量的话则直接返回变量本身,即可作为右值使用,又可作为左值使用(只有在所有的可能返回值都是变量时才能使用)。
注意:三目运算符可能返回的值中如果有一个是常量值,则不能作为左值使用。
c++中的引用:变量名的本质是存储空间的别名。在c++中新增加了引用的概念,可以看做是一个已定义变量的别名。
Type& name=var;
问题:c++对三目运算符做了什么?
当三目运算符的可能返回都是变量时,返回的是变量引用。当三目运算符的可能返回中有常量时,返回的是值。
10、引用的本质--第5课
引用在一些场合可以代替指针,列如swap函数。引用作为函数形参不需要初始化。函数调用时需要初始化。
const引用:
const引用让变量拥有只读属性,但是也能通过指针来修改值。
另一种情况:特殊的引用:当使用常量对const引用进行初始化时,c++编译器会为常量值分配空间,并将引用名作为这段空间的别名。使用字面常量对const引用初始化后将生成一个只读变量。
问题:引用有自己的存

本文详细探讨了C与C++的关系,包括C++对C的继承和增强,如面向对象支持、类型加强、异常处理等。介绍了C++中变量定义的改变、struct的加强、const关键字的进化、新增的bool类型和引用。还讨论了内联函数、函数参数的扩展、函数重载、动态内存分配、命名空间和新型的类型转换。通过对这些特性的对比,揭示了C++在语言设计上的改进。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



