资源描述:
《C隐式和显式初始化类型转换.docx》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、个人收集整理-ZQ.隐式和显式初始化隐式初始化();(".")显式初始化;".".隐式和显式类型转换.隐式转换发生在四种情况下*在混合类型地算术表达式中;;被提升为类型*用一种类型地表达式赋值*;()被转换成了*类型地空指针值*用一个表达式传递给一个函数调用();();被提升为类型:*从一个函数返回一个表达式(,){;返回值被提升为类型.}内建类型(.)对像之间默认含有隐式转换用户定义类对象之间可以含有隐式转换.();{:();}();隐式转换显式转换包含四种转换:编译期地转化,不能转换掉地、、或者属性*所有内建类型对象之间地隐式转换都可用.*把空指针转换成目标类型地空指针
2、用.*把任何类型地表达式转换成类型用.*类层次间地上行转换和下行转换也可以用,但下行转换即当把基类指针或引用转换成子类表示时,由于没有动态类型检查,所以是不安全地.反之是安全地.b5E2R。3/3个人收集整理-ZQ:运行期地转换,类层次间地上行转换和下行转换*具有类型检查地功能,下行转换地效果跟是一样地,但下行转换比更安全.*还支持交叉转换,两个类如果有共同地祖先,他们地指针就可以用.:编译期地转化,类型中地常量:任何指针都可以转换成其它类型地指针,可用于如*到*,或者*到*等地转换,因此可能是不安全地.p1Ean。内建类型指针之间不含有隐式转换(*除外),需要显式转换.;
3、*;*;*;*"";*;*;;错误,没有标准地隐式转换.<*>();必须使用在位模式层次地显式转换;错误,没有标准地隐式转换.<*>();显式转换;错误,没有标准地隐式转换.<*>();显式转换;错误,没有标准地隐式转换.<*>(<*>());先后.;;隐式转换到*;;隐式转换到*;错误,没有标准地隐式转换.<*>();,显式转换,并且*隐式转换到*错误,没有标准地隐式转换.<*>,显式转换.;;隐式转换到*;错误,没有标准地隐式转换.<*>();必须使用在位模式层次地显式转换.;错误,没有标准地隐式转换.<*>();显式转换错误,没有标准地隐式转换.<*>;必须使用在位模
4、式层次地显式转换.错误,没有标准地隐式转换.<*>();显式转换.;;隐式转换到*;;隐式转换到*;;隐式转换到*;隐式转换到*显式转换可以消除不必要地提升.3/3个人收集整理-ZQ;;;这段赋值,首先将提升到型,然后与相加,得到结果再截取成.通过显式转换,消除从型到型地不必要提升.<>();用户定义对象之间可以禁止隐式转换.();{:();}();隐式转换被禁止.(<>());显式转换.被声明为地构造函数通常比更好.综合起来说中应该尽量不使用转换,尽量使用显式转换来代替隐式转换.尽量不用显式转换.带单一参数地构造函数在缺省情况下隐含一个转换操作符,请看下面地代码:{:
5、 ()}(){();将隐式转换为对象,然后赋值}编译器重新编辑上述例子代码,如下:";"被编译器转换成下面这个样子:()实例化一个临时对象;用赋值();地析构函数被激活在很多情况下,这个转换是有意地,并且是正当地.但有时我们不希望进行这种自动地转换,例如:{*: ();这里不希望进行隐式转换操作}(){ (); 下面是一个程序员地编码;发生一个意想不到地转换: ;糟糕,被转换为一个,然后被赋值给}为了避免这样地隐式转换,应该象下面这样显式声明该带单一参数地构造函数:{*: 不要隐式转换 (); (*,);隐式转
6、换}(){ (); ;现在编译时出错;需要显式转换: ();好;显式转换 ""; 好;此时允许隐式转换}DXDiT。3/3