C++的显示转换
来源:互联网 发布:开淘宝店在还好做吗 编辑:程序博客网 时间:2024/05/16 13:57
近日在看《C++ primer》,不得不说,中国的教材有些坑人,老师也有些坑人,只是说有些坑人,因为还是有些不错的!
在需要数据类型转换时,我习惯于用()进行转换,这也是谭浩强书本教的,也是大学老师教的方式。今天读《C++ primer》方才知道这是一种C风格的数据类型转换,是C++为了兼容C而保留下来的。
实际上,C++提供了类型转换操作符供显示的类型转换,即:
static_cast, dynamic_cast, const_cast, reinterpret_cast。
这四个是用来进行显示数据类型转换的。
这些数据类型转换操作符的一致用法是:
cast-name <type> (expression);
其中,cast-name是类型转换操作符名,type是目的数据类型 ,expression是待转换数据。
下面对这四个显式数据转换操作符进行简单的说明。
1.static_cast
在C语言中使用()实现的转换都可以使用static_cast操作符实现之。
2.const_cast
使用该操作符可以将待转换数据的const属于去除,如下代码所示:
#include <iostream>using namespace std;int main(int argc, char ** arg){const int b = 1;int *p = const_cast<int *>(&b);return 0;}3.reinterpret_cast
通俗的说,这个转换可以讲任何数据类型的指针转换为其他数据类型的指针。
4.dynamic_cast
用在子类与父类之间的转换。
这里引用一个网络的博客的总结:
http://www.cnblogs.com/ider/archive/2011/08/05/cpp_cast_operator_part6.html
对于传统的转换方式(C式或函数式),只在数值类型(包括整型、浮点型、字符类型和枚举)上使用。这也是延续C的形式,当然这类转换也是可以用static_cast来替换,但是因为是基本类型,所以传统转换已经很直观。
对于const_cast转换运算符,用在需要去除掉const限定的时候。其实这种情况出现的很少,可能的方法在const_cast一文中已经又举例,不过还是反复强调, 使用const_cast转换后,绝对不可试图修改结果的值。
对于reinterpret_cast转换运算符,一般用在将对象指针类型转换到整数类型或者void * (空指针)。如同在文中举出的隐患,因此注意的是,若要使用其结果,一定要将类型转换回去后使用。也不要将随意的整数转换成指针类型。
对于static_cast转换运算符,将其用在对象的转换之上(虽然static_cast也可以用在有继承关系的类型指针之间,但是还是将这方面的转换交给dynamic_cast来操作吧), static_cast会调用相应的构造函数或者重载的转换运算符。
- C++【显示类型转换】
- C++的显示转换
- C++的显示转换
- 各种格式时间/日期的显示及转换(C/C++)
- c++中的显示转换
- c++中的显示转换
- <C++>十进制数转换成二进制显示
- C#_lesson1_显示转换和隐式装换
- 【C++Primer Ch5表达式】类型转换:显示转换
- C、C++中的隐式转换和显示转换
- c语言图形显示转换为指针显示
- Qt学习: 如何显示中文,QString和string以及C风格字符串的转换
- C++的显示转换*_cast
- C++的显示转换(第一次)
- C#的显示引用转换
- JavaScript的显示类型转换
- c语言的转换
- C语言的转换
- ubuntu软件源更新增大APT::CahceLimit
- Make A Plan(二)
- 常量、封装和隐藏
- 窗口大小控制MINMAXINFO
- JS小注
- C++的显示转换
- Struts study Case002
- Linux中errno使用
- windows azure 试用感受7
- Linux内存分析(4) -- paging_init (setup_arch部分)
- linux多线程学习笔记二---基本线程编程
- 商业智能之联机分析处理(OLAP)(2012/3/23)
- nopCommerce 介绍其它
- sphinx+mysql+mongodb 大数据量的数据显示