c++基础学习5-c++新关键字

来源:互联网 发布:linux驱动开发详解 4 编辑:程序博客网 时间:2024/06/03 20:59

1,动态内存分配

  c++中通过new关键字进行动态申请内存,用delete释放内存。

在c++中这两个关键字是内置于语言里面的,而不是像c里面由库函数提供的

这是c++中的动态内存分配首先给变量分配,然后在给数组分配空间,并用delete释放空间



new关键字与malloc函数的区别是什么呢?

new关键字是c++的一部分,malloc是由c库函数提供的函数。

new以具体类型为单位进行内存分配,malloc只能以字节为单位进行内存分配

new在申请单个类型变量时可进行初始化,malloc不具备内存初始化的特性。



2,c++中的命名空间

  在c语言中只有一个全局作用域

         1,c语言中所有的全局标识符共享同一个作用域。

         2,标示符之间可能发生冲突

如何处理这两个问题呢?  

     在c++中提出了命名空间的概念。

     在命名空间中,不同命名空间中的标识符可以同名而不会发生冲突。

     命名空间可以相互嵌套

     命名空间以关键字namespace  命名空间,如果需要使用整个名称空间的话需要

     using  namespace  xxx

     使用名称空间的变量的话:using  name::variable

     使用默认名称空间变量的: ::variable

3,强制类型转换

      讲解强制类型转换,首先说明c的类型转换 (类型)(变量或表达式)

那么c中的类型转换有什么问题呢?

1,任意类型之间都可以转换,编译器容易判断错误。

2,在源代码中无法快速找到所有强制类型转换的语句,因为c语言中的强制类型转换有多中,比如:

(char)n    char(n)   int(n)   (int)n   根本无法直接找到是那种语句


c++中提供了四种强制类型转换

1,static_cast  2,const_cast  3,dynamic_cast  4,reinterpret_cast

c++用这四种类型的强制类型转换

第一种static_cast 用于基本类型之间的转换,但不能用于基本类型指针间的转换。

第二种const_cast用于去除变量的const属性。

第三种dynamic_cast用于类层次间的转换,还可以用于类之间的交叉转换,并且具有检查类型的功能,比static_cast更安全

第四种reinterpret_cast用于指针间的强制类型转换,用于整数和指针间的强制类型转换






0 0
原创粉丝点击