首页 > 编程 > C++ > 正文

4、C++中新的关键字

2019-11-08 01:47:19
字体:
来源:转载
供稿:网友
1、C++中的动态内存分配     C++中通过new关键字进行动态内存申请     C++中的动态内存申请是基于类型进行的     delete关键字用于内存释放          变量申请:     Type* pointer = new Type;     //......     delete pointer;          数组申请:     Type* pointer = new Type[N];     //......     delete [] pointer ;     2、new关键字与malloc函数的区别    ·new关键字是C++的一部分,malloc是由C库提供的函数    ·new以具体类型为单位进行内存分配,malloc只能以字节为单位进行内存分配    ·new在申请单个类型变量时可进行初始化,malloc不具备内存初始化的特性    3、C++中的命名空间     在C语言中只有一个全局作用域         C语言中所有的全局标识符共享通一个作用域             标识符之间可能发生冲突                  C++中提出了命名空间的概念       ·命名空间将全局作用域分成不同的部分       ·不同命名空间中的标识符可以同名而不会发生冲突       ·命名空间可以相互嵌套       ·全局作用域也叫默认命名空间4、C++命名空间的使用:    ·使用整个命名空间:using namespace name;    ·使用命名空间中的变量:using name::variable;    ·使用默认命名空间中的变量:::varible;        默认情况下可以直接使用默认命名空间中的所有标识符    5、强制类型转换   ·C方式强制类型转换存在的问题      过于粗暴          任意类型之间都可以进行转换,编译器很难判断其正确性      难于定位          在源码中无法快速定位所有使用强制类型转换的语句             在程序设计理论中强制类型转化是不被推荐的,与goto语句一样,应该尽量避免   6、C++将强制类型转换分为4种不同的类型     static_cast    const_cast     dynamic_cast   reinterPRet_cast          用法:XXX_cast<Type>(Expression)     7、static_cast强制类型转换   ——用于基本类型间的转换,但不能用于基本类型指针间的转换   ——用于有继承关系类对象之间的转换和类指针之间的转换         int main()      {          int i = 0;          char c = 'c';          int *pi = &i;          char *pc = &c;                    c = static_cast<char>(i);  //It's ok!          pc = static_cast<char *>(pi);//  GG!                    return 0;       }         static_cast是编译期进行转换的,无法在运行时检测类型,   所以类类型之间的转换可能存在风险。   8、const_cast强制类型转换       ——用于去除变量的const属性           int main()           {               const int& j = 1;               int& k = const_cast<int&>(j);               const int x = 2;               int& y = const_cast<int&>(x);                              k = 5;                              printf ("j = %d/n", j);               printf ("k = %d/n", k);                              y = 3;                              printf ("x = %d/n", x);               printf ("y = %d/n", y);               printf ("&x = %p/n", &x);               printf ("&y = %p/n", &y);                              return 0;           }           9、reinterpret_cast强制类型转换  ——用于指针类型间的强制类型转换  ——用于整数和指针类型间的强制转换      typedef void(PF)(int);            int main()      {          int i = 0;          char c = 'c';          int *pi = reinterpret_cast<int*>(&c);          char *pc = reinterpret_cast<char *>(&i);          PF* pf = reinterpret_cast<PF*>(0x12345678);                    c = reinterpret_cast<char>(i);// Oops,static_cast should be used here.          return 0;      }        10、dynamic_cast强制类型转换  ——主要用于类层次间的转换,还可以用于类之间的交叉转换  ——dynamic_cast具有类型检查的功能,比static_cast更安全  11、小结   ·C++中内置了动态内存分配的专用关键字   ·C++中的动态内存分配是基于类型进行的   ·C++中的命名空间概念用于解决名称冲突问题   ·C++细化了C语言中强制类型转换的方式      ——C++不推荐在程序中使用强制类型转换      ——C++建议在强制类型转换时考虑一下究竟希望什么样的转换
上一篇:C++ 虚函数表解析

下一篇:c++程序计时

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选