4、C++中新的关键字
来源:互联网 发布:linux 启动service 编辑:程序博客网 时间:2024/06/05 16:11
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++中通过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++建议在强制类型转换时考虑一下究竟希望什么样的转换
0 0
- 4、C++中新的关键字
- C++中新的关键字
- Objective-C中copy 、retain以及ARC中新加入的strong、weak关键字的含义
- Objective-C中copy 、retain以及ARC中新加入的strong、weak关键字的含义
- Objective-C中copy 、retain以及ARC中新加入的strong、weak关键字的含义
- Objective-C中copy 、retain以及ARC中新加入的strong、weak关键字的含义
- C++中一些新的关键字
- C 关键字的秘密 中
- 新的关键字
- 新的关键字
- 5 . 新的关键字
- 四、新的关键字
- iOS5中新的关键字strong, weak, unsafe_unretained
- c++学习笔记(4.c++中新的关键字)
- c++学习笔记(4.c++中新的关键字)
- c语言中static 关键字的使用
- C语言中关键字extern的作用
- C语言中一些关键字的作用
- 我眼中的设计模式(6)
- (三十一)Qt中的调色板QPalette
- http与Socket的区别
- [编程题]数字和为sum的方法数
- 线程池ExecutorService
- 4、C++中新的关键字
- 图像处理基础(3):均值滤波器及其变种
- svn E000113错误
- Android Retrofit 2.0框架上传图片解决方案(一张与多张的处理)
- BS与CS的联系与区别
- 0220HTML学习
- UML常用图的几种关系的总结
- Xamarin.IOS UiTextView 长文本不显示问题。
- 【USACO5.4.5】奶牛的电信(BSOI2155)