C+ Primer第四章③

C++ Primer

第四章 表达式

类型转换

隐式类型转换

不需要你关心,编译器会帮你搞定:

int a = 3.5 + 3.6; //a=7

算术类型之间的隐式转换原则是尽量避免损失精度。 我的感觉是,隐式转换都很自然,我们之前也碰到过,只不过没提到这个概念,在这里我就不一一分析了,感觉不知道这个概念,就这么自然地用也挺好的,不过后面我觉得有必要提这个概念的地方我还是会说明的。

显式转换

有时我们希望显式地将对象强制转换成另外一种类型:

int i = 2, j = 1;
double k = j / i;

虽然有时候不得不使用强制类型转换,但我们还是要尽量避免使用它 强制类型转换有四种,算四大天王吧。

1.static_cast

任何具有明确定义的类型转换,只要不包含底层const(所指对象为常量),都可以使用它:

double k = static_cast<double>(j) / i; //把j转换成double就行了

两种情况常用static_cast:

  1. 把一个较大的算术类型赋值给较小的类型,我们用static_cast相当于告诉编译器,我们不在乎精度损失。
  2. static_cast对于编译器无法自动执行的类型转换也很有用,什么意思呢?看代码:
    void* p = &d; //任何非常量对象的地址都能存入void*
    double *dp = static_cast<double*>(p); //转换回来,成为double*
    2.const_cast
    作用只有一个,去除底层const,而且你只能用它来去除:
    const char *pc; //pc指向const char,是底层const
    char *p = const_cast<char*>(pc); //p是*char,去除了底层const
    3.reinterpret_cast
    建议不用,也用不着,要了解的自行百度。
    旧式强制类型转换
    它在不同地方用起来跟前面三者都有相似的地方,是因地制宜的一个用法,要用到的时候去查一下就好了。
    int *pi;
    char *pc = (char*) pi;
全部评论

相关推荐

仁者伍敌:难怪小公司那么挑剔,让你们这些大佬把位置拿了
点赞 评论 收藏
分享
05-01 22:41
中南大学 Java
点赞 评论 收藏
分享
评论
4
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务