| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
 本帖最后由 moc 于 2018-8-26 11:31 编辑  
 
1、命名空间 
C:在C语言中只有一个全局作用域,所有的全局标识符共享同一个作用域,标识符之间可能发生冲突。 
C++:提出了命名空间的概念,命名空间将全局作用域分成不同的部分,不同命名空间中的标识符可以同名而不会发生冲突,命名空间可以相互嵌套,全局作用域也叫默认命名空间(std). 
C++命名空间的定义: 
        namespace name {  …  } 
C++命名空间的使用: 
使用整个命名空间:using namespace name; 
使用命名空间中的变量:using name::variable; 
        std是c++标准命名空间,c++标准程序库中的所有标识符都被定义在std中,比如标准库中的类iostream、vector等都定义在该命名空间中,使用时要加上using声明(using namespace std)  或使用域作用符::(如std::string)。 
拓展: 
<iostream>和<iostream.h>格式不一样,前者没有后缀,实际上,在你的编译器include文件夹里面可以看到,二者是两个文件,打开文件就会发现,里面的代码是不一样的。后缀为.h的头文件c++标准已经明确提出不支持了,早期的实现将标准库功能定义在全局空间里,声明在带.h后缀的头文件里,c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。 因此, 
        1)当使用<iostream.h>时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c++实现; 
        2)当使用<iostream>的时候,该头文件没有定义全局命名空间,必须使用namespace std;这样才能正确使用cout。 
2、register关键字增强 
register关键字请求“编译器”将局部变量存储于寄存器中,c语言中无法取得register变量地址,c++编译器有自己的优化方式,不适用register也可能做优化,并且c++中可以取得register变量地址; 
        c++编译器发现程序中需要取register变量的地址时,register对变量的声明变得无效。 
3、实用性”增强” 
        C语言中的变量都必须在作用域开始的位置定义!! 
        C++中变量可以随用随定义。 
4、bool类型关键字 
 C++在C语言的基本类型系统之上增加了bool类型。 
      C++中的bool可取的值只有true和false, 理论上bool只占用一个字节,如果多个bool变量定义在一起,可能会各占一个bit,这取决于编译器的实现。 
      true代表真值,编译器内部用1来表示; false代表非真值,编译器内部用0来表示。 
      bool类型只有true(非0)和false(0)两个值; C++编译器会在赋值时将非0值转换为true,0值转换为false。 
5、三目运算符增强 
1)C语言返回变量的值          C++语言是返回变量本事 
2)C语言中的三目运算符返回的是变量值,不能作为左值使用 
C++中的三目运算符可直接返回变量本身,因此可以出现在程序的任何地方 
3)注意: 
三目运算符可能返回的值中如果有一个是常量值,则不能作为左值使用 
        (a < b ? 1 : b )= 30; 
4)C语言如何支持类似C++的特性? 
        *((a > b) ? &a : &b) = 10; 
6、struct类型增强 
C语言的struct定义了一组变量的集合,C编译器并不认为这是一种新的类型。 
C++中的struct是一个新类型的定义声明。 
 
所以在C中定义变量的时候需要在前面加上 struct 关键字进行修饰。 
C++中 struct 定义了一种新的数据类型,可以直接用来定义变量。 
7、类型和返回值更加严格 
C中函数可以没有返回参数类型,函数参数可以没有数据类型,没有参数的函数表示可以接收任意个参数。 
在C语言中 
      int f(    );表示返回值为int,接受任意参数的函数 
      int f(void);表示返回值为int的无参函数 
在C++中 
      int f(  );和int f(void)具有相同的意义,都表示返回值为int的无参函数。 
C++更加强调类型,任意的程序元素都必须显示指明类型,都必须要有类型。 
 8.const增强 
c语言中可以通过指针操作改变const变量的值。 c++的const变量是真正的常量, C中的const只是一个冒牌货。 
例如 :const int a = 10;并没有在栈开辟区域,而是在常量区有一个符号表,存放键值对。对a取地址时,相当于对常量10取地址,此时,编译器会临时开辟一个空间temp,让这个指针存放这个临时空间的地址. 
const常量与宏 
        define a 20 预处理阶段, 作用域全局。  
        const int a = 20; 编译阶段, 有作用域。 
 
 
 
 
  |   
 
 
 
 |