static_cast主要用于明确的类型转换,例如整数类型之间的转换、整数与浮点数之间的转换、基类到派生类的转换等。这些转换具有明确的类型关联性。对于double类型到string类型的转换,推荐使用std::to_string函数,这是C++标准库中专门为此设计的函数。例如:std::string str = std::to_string(3.14159);这...
static_cast 和 reinterpret_cast 操作符修改了操作数类型。它们不是互逆的; static_cast 在编译时使用类型信息执行转换,在转换执行必要的检测(诸如指针越界计算, 类型检查). 其操作数相对是安全的。另一方面;reinterpret _cast 仅仅是重新解释了给出的对象的比特模型而没有进行二进制转换,例如: int n=9; double ...
实际上,将大型算术类型转换给小型算术类型时很有用(如double转换为int),使用static_cast告诉编译器,我知道会损失精度但是并不在乎,这样编译器就不会发出警告。 更让人高兴的是,static_cast对于编译器无法自动执行的类型转换提供了很好的支持。 例如: 1doublesomevalue =3.14;2void*p = &somevalue;//正确:任何非c...
short是两字节,int是四字节,由short型转成int型是宽化转换(bit位数增多),编译器没有warning,如下图所示。宽化转换(如char到int,int到long long,int到float,float到double,int到double等)构成隐式转换,编译器允许直接转换。 但若 double a=2000; short b; b=a; 1. 2. 3. 是从8字节的double型转成2字节...
在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。 class B{ public: int m_iNum; virtual void foo(); }; class D:public B{ public: char *m_szName[100]; }; void func(B *pb){ D *pd1 = static_cast(pb);
因为从安全性上说,不同的转型(cast)有很大的区别,所以 C++ 引入了四种不同的具名转型(named cast...
operatordouble()const{returnm_real;}//类型转换函数 private: doublem_real; doublem_imag; }; intmain(){ //下面是正确的用法 intm=100; Complexc(12.5,23.8); longn=static_cast<long>(m);//宽转换,没有信息丢失 charch=...
注:static_cast不能转换掉expression的const、volatile和__unaligned属性。 //隐式的类型转换intfirstnumber=10;doubleresult=(double)firstnumber/secondnumber;//使用static_dynamicdoubleresult=static_cast<double>(firstnumber/secondnumber); 举个例子:
short是两字节,int是四字节,由short型转成int型是宽化转换(bit位数增多),编译器没有warning,如下图所示。宽化转换(如char到int,int到long long,int到float,float到double,int到double等)构成隐式转换,编译器允许直接转换。 但若 double a=2000; short b; ...
int n=9; double d=static_cast< double > (n); 上面的例子中, 我们将一个变量从 int 转换到 double。 这些类型的二进制表达式是不同的。 要将整数 9 转换到 双精度整数 9,static_cast需要正确地为双精度整数 d 补足比特位。其结果为 9.0。而reinterdivt_cast 的行为却不同: ...