鱼C论坛

 找回密码
 立即注册
查看: 2978|回复: 0

[学习笔记] 024-C++对C的加强

[复制链接]
发表于 2018-8-26 11:31:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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; 编译阶段, 有作用域。




本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-22 02:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表