当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:55:00  来源:本站整理

C++中理解"传送参数"和非常之间的差别[VC/C++编程]

赞助商链接



  本文“C++中理解"传送参数"和非常之间的差别[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

从语法上看,在函数里声明参数与在catch子句中声明参数几近没有什么差别:

class Widget { ... }; //一个类,具体是什么类
// 在这里并不重要
void f1(Widget w); // 一些函数,其参数辨别为
void f2(Widget& w); // Widget, Widget&,或
void f3(const Widget& w); // Widget* 范例
void f4(Widget *pw);
void f5(const Widget *pw);
catch (Widget w) ... //一些catch 子句,用来
catch (Widget& w) ... //捕捉非常,非常的范例为
catch (const Widget& w) ... // Widget, Widget&, 或
catch (Widget *pw) ... // Widget*
catch (const Widget *pw) ...

你因此大概会认为用throw抛出一个非常到catch子句中与通过函数调用传送一个参数二者基本相同.这里面确有一些相同点,但是他们也存在着宏大的差别.

让我们先从相同点谈起.你传送函数参数与非常的途径可以是传值、传送引用或传送指针,这是相同的.但是当你传送参数和非常时,系统所要完成的操作历程则是完好差别的.产生这个差别的缘由是:你调用函数时,程序的掌握权终究还会返回到函数的调用处,但是当你抛出一个非常时,掌握权永久不会回到抛出非常的地方.

有这样一个函数,参数范例是Widget,并抛出一个Widget范例的非常:

// 一个函数,从流中读值到Widget中
istream operator>>(istream& s, Widget& w);
void passAndThrowWidget()
{
 Widget localWidget;
 cin >> localWidget; //传送localWidget到 operator>>
 throw localWidget; // 抛出localWidget非常
}

当传送localWidget到函数operator>>里,不用举行拷贝操作,而是把operator>>内的引用范例变量w指向localWidget,任何对w的操作实际上都施加到localWidget上.这与抛出localWidget非常有很大差别.不管通过传值捕捉非常还是通过引用捕捉(不能通过指针捕捉这个非常,因为范例不匹配)都将举行lcalWidget的拷贝操作,也就说传送到catch子句中的是localWidget的拷贝.必须这么做,因为当localWidget脱离了生存空间后,其析构函数将被调用.假如把localWidget本身(而不是它的拷贝)传送给catch子句,这个子句接纳到的只是一个被析构了的Widget,一个Widget的“尸首”.这是无法利用的.因此C++标准要求被做为非常抛出的对象必须被复制.


  以上是“C++中理解"传送参数"和非常之间的差别[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • Windows 7中UAC中的蓝黄提醒框
  • 浅析数据源在JDBC中的操纵
  • Weblogic中因为IP变更招致SubCoordinator not available,Transa
  • 关于在weblogic中异步伐用webservice
  • Weblogic中的load banlance问题
  • 关于weblogic中操纵Dom4j、Xerces招致实施线程挂起的问题
  • JVM TI学习(1) 若何中止weblogic中stuck thread
  • Weblogic中几个internal的XA timeout(情况切换相关的超时)
  • 如安在基于注解气势的Spring-MVC中操纵阻碍器
  • 关于weblogic中jms message的情况
  • 关于Weblogic中XAER_NOTA XAException的两种注释
  • 关于weblogic中操纵prepared statement cache后操作DDL的问题
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .