分类: C/C++
2014-10-31 09:59:04
C++更强调语言的实用性,所有的变量都可以在需要实用时再定义,c语言中的变量都有必须在作用域开始的位置定义。
Register关键字请求编译器将局部变量存储于寄存器中,c语言中无法取得register变量的地址,c++编译器有自己的优化方式,不使用register也可能
做优化,c++编译器发现程序中需要register变量的地址时,register 对变量的声明变得无效。
在c中重复定义多个同名的全局变量时合法的,在c++中不允许定义多个同名的全局变量,c语言中多个同名的全局变量最终会链接到全局数据区的
一个地址空间上。
C++编译器对从const常量的处理:当碰见常量声明时在符号表放入常量,编译过程中若发现使用常量则直接以符号表中的值替换,编译过程中若
发现const使用了extern或者&操作符,则给对应的常量分配存储空间。
C语言中的const变量是只读变量,有自己的存储空间,c++中的const常量可能分配空间:当const常量为全局并且需要在其他文件中使用,使用&
操作符取const常量的地址。
C++中的const常量类似于宏定义,c++中的const常量在与宏定义不同:const常量是由编译器处理的提供类型检查和作用域检查,宏定义由预处
理器处理单纯的文本替换。
C中的struct定义了一组变量的集合,c编译器并不认为这是一种新的类型,c++中的struct是一个新类型的定义声明。
C++中所有的变量和函数都必须有类型,c中的默认类型在c++中是不合法的。
在c中,int f()表示返回值为int,接受任意参数的函数int f(void)表示返回值为int的无参函数,在c++中int f()和int f(void) 具有相同的意义,都表
示返回值为int的无参函数。
C++在c的基本类型系统之上增加了bool,C++中的bool可取的值只有true和false,true代表真值,编译器内部用1 来表示,False代表假,编译器内部
用0 表示。
理论上bool只占用一个字节,如果多个bool变量定义在一起可能会各占一个字节。
C++编译器会在赋值时将非0值转换为true,0值转换为false
C中三目运算符返回的是变量值,不能作为左值使用,c++中的三目运算符可直接返回变量本身,因此可以出现在程序的任何地方,三目运算符可
能返回值中如果有一个是常量值,则不能作为左值使用。