C++中超恶心的类型转换
来源:互联网 发布:淘宝收藏夹在哪里 编辑:程序博客网 时间:2024/04/27 21:23
java中的类型转换不多言,以前从没注意类型
但CPP中的类型转换还是要多说几句了
一、首先先看一下CPP 中的强制转换
1. static_cast 该函数可以实现int double float char类型的互相转换,比较给力
例如:
int a=4;
float f=static_cast<float>(a);
2. const_cast 把const类型的指针变为非const类型的指针 不多说,
例如:
const int *fun(int x,int y)
{
}
int *ptr=const_cast<int *>(fun(2.3));
3.dynamic_cast
该操作符用于运行时检查该转换是否类型安全,但只在多态类型时合法,即该类至少具有一个虚拟方法。dynamic_cast与 static_cast具有相同的基本语法,dynamic_cast主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换。在 类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的;在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。如:
class C
{
//…C没有虚拟函数
};
class T{
//…
}
int main()
{
dynamic_cast<T*> (new C);//错误
}
此时如改为以下则是合法的:
class C
{
public:
virtual void m() {};// C现在是 多态
}
4.reinterpret_cast
interpret是解释的意思,reinterpret即为重新解释,此标识符的意思即为数据的二进制形式重新解释,但是不改变其值。如:int i; char *ptr="hello freind!"; i=reinterpret_cast<int>(ptr);这个转换方式很少使用。
二、其他类型转换1. int double float转为string
int a; //需要转换的int型数字 //double a;
string int2string;
stringstream ss;
ss<<a;
ss>>int2string;
2.int 转char*
int a=1325423423;
char aa[23];
_itoa(a,aa,10);
cout<<aa<<endl;
3. string类型转化为double,int,char类型
string strvar="3.1415926aa";
double dvar=atof(strvar.c_str());
cout<<"convert string to double "<<dvar<<endl;
string strvar="2007a";
int ivar=atoi(strvar.c_str());
cout<<"convert string to int "<<ivar<<endl;
string strvar="hello";
const char* cvar=strvar.c_str();//去掉const会报错
cout<<"convert string to char strvar="<<strvar<<" and cvar=";
for(int i=0;i<strvar.length();i++)
cout<<cvar[i];
cout<<endl;
_itoa atoi、atof、itoa、itow _itoa_s这类函数不多说了,查MSDN就很给力了
CString也不说了
另外的:
string转char*
其他网站的
1.data
如:
string str="abc";
char *p=str.data();
2.c_str
如:string str="gdfd";
3. copy
比如
string str="hello";
char p[40];
str.copy(p,5,0); //这里5,代表复制几个字符,0代表复制的位置
*(p+5)='\0'; //要手动加上结束符
cout < <p;
评价:不知是我用VS2012的原因还是作者没有自己操作,我测试的结果是.data()和.c_str()都只能返回const char*。。。
copy的方法还是比较不错。
那就再说const char*转为char* 可以使用const_cast 。也可使用下述代码
strcpy(buf, expr); //这个函数好像林锐吃过苦头的
string s(a);
- C++中超恶心的类型转换
- 【C#】中Decimal类型转换的问题
- C中常见的类型转换
- C/C++: C++ 中 static_cast 类型转换的含义
- C语言中类型转换
- 类型转换(c中)
- ANSI C中类型转换
- C/C++中类型转换
- C语言中类型转换
- android中恶心的getDrawingCache
- android中恶心的getDrawingCache
- C++中各种类型的转换
- c中结构体指针的强制类型转换
- C/C++中自动类型转换的规则
- C语言中类型转换时的数据丢失问题
- C语言中int到float的强制类型转换
- C语言中int到float的强制类型转换
- C语言中强制类型转换的总结
- 怎样在VS2010中打开VS2012的项目
- poj 1442 Black Box
- 使用HttpClient接口实现网络通信
- Ubuntu12.04安装 OpenStack+G版+单节点+GRE模式
- 一针见血之C#
- C++中超恶心的类型转换
- InstallShield相关资源
- The builder launch configuration could not be found
- layoutSubviews何时调用的问题
- Project Euler -> problem 1
- Project Euler -> problem 2
- oracle参数传递问题
- Project Euler -> problem 3
- Project Euler -> problem 4