Tag: 抛出

在c ++中,exception是如何工作的(在幕后)

我一直看到人们说exception缓慢,但我从来没有看到任何证据。 因此,我不会问是否会出现exception情况,所以我可以决定何时使用它们,以及是否缓慢。 从我所知,exception与做一堆回报是一回事,但是它也会检查何时需要停止回报。 如何检查何时停止? 我正在猜测,并说有一个第二个堆栈,其中包含exception和堆栈位置的types,然后返回,直到它到达那里。 我也猜测,唯一一次触摸就是掷出和每一次尝试/抓住。 AFAICT实现与返回代码类似的行为将花费相同的时间量。 但是这都是猜测,所以我想知道。 exception是如何工作的?

在C ++中,如果throw是一个expression式,它的types是什么?

我在一个简短的讨论中把它提到了reddit: http://www.smallshire.org.uk/sufficientlysmall/2009/07/31/in-c-throw-is-an-expression/ 基本上,作者指出在C ++中: throw "error" 是一个expression。 在C ++标准中,这在主文本和语法中都是相当清楚的。 然而,至less对我来说不明确的是什么types的expression? 我猜“ void ”,但是用g ++ 4.4.0和Comeau做了一点实验,结果如下: void f() { } struct S {}; int main() { int x = 1; const char * p1 = x == 1 ? "foo" : throw S(); // 1 const char * p2 = x == 1 ? "foo" : […]

我应该在C ++中使用exception说明符吗?

在C ++中,您可以指定一个函数可以或不可以通过使用exception说明符来引发exception。 例如: void foo() throw(); // guaranteed not to throw an exception void bar() throw(int); // may throw an exception of type int void baz() throw(…); // may throw an exception of some unspecified type 我怀疑实际使用它们是因为以下原因: 编译器没有以任何严格的方式强制执行exception说明符,所以好处不大。 理想情况下,你想得到一个编译错误。 如果一个函数违反了一个exception说明符,我认为标准的行为是终止程序。 在VS.Net中,它将throw(X)视为throw(…),所以遵守标准并不强烈。 你认为应该使用exception说明符吗? 请回答“是”或“否”,并提供一些理由来certificate您的答案。

exception与错误的区别

我想了解更多关于基本Java和不同types的Throwables,有人可以让我知道exception和错误之间的区别吗?

`throw new Error`和`throw someObject`有什么区别?

我想编写一个通用的error handling程序,它会捕获代码中任何实例抛出的自定义错误。 当我没有像下面的代码throw new Error('sample') try { throw new Error({'hehe':'haha'}); // throw new Error('hehe'); } catch(e) { alert(e); console.log(e); } 日志在Firefox中显示为Error: [object Object] ,我无法parsing对象。 对于第二次throw日志显示为: Error: hehe 而当我做到了 try { throw ({'hehe':'haha'}); } catch(e) { alert(e); console.log(e); } 控制台显示为: Object { hehe="haha"}其中我能够访问错误属性。 有什么不同? 代码中看到的差异是什么? 像string将只是作为string和对象作为对象传递,但语法会不同? 我还没有探讨抛出错误对象…我只做了扔string。 除了上面提到的两种方法还有别的方法吗?

重新抛出不正确的堆栈跟踪

我用“throw”重新抛出exception,但是堆栈跟踪不正确: static void Main(string[] args) { try { try { throw new Exception("Test"); //Line 12 } catch (Exception ex) { throw; //Line 15 } } catch (Exception ex) { System.Diagnostics.Debug.Write(ex.ToString()); } Console.ReadKey(); } 正确的堆栈跟踪应该是: System.Exception: Test at ConsoleApplication1.Program.Main(String[] args) in Program.cs:Line 12 但是我得到: System.Exception: Test at ConsoleApplication1.Program.Main(String[] args) in Program.cs:Line 15 但第15行是“投掷”的位置。 我用.NET 3.5testing了这个。

C ++之间的差异03 throw()说明符C ++ 11 noexcept

除了分别检查运行时和编译时间之外, throw()和noexcept之间是否还有其他区别? 维基百科的C ++ 11文章指出,C ++ 03抛出说明符已被弃用。 为什么noexcept能够在编译时覆盖所有的内容呢? [注意:我把这个问题和这篇文章提到了 ,但是拿不到折服的可靠原因。]

如何在C#中使用Java风格的关键字?

在Java中, throws关键字允许一种方法来声明它不会自己处理exception,而是把它抛给调用方法。 在C#中是否有类似的关键字/属性? 如果没有相同的东西,你怎么能达到同样的效果?

什么时候应该使用Throwable而不是新的Exception?

鉴于:Throwable是Exception的超类。 当我在编写自己的“exception”时读取文本时,会看到在catch块中使用Throwable示例,其他文本显示在catch块中使用new Exception() 。 我还没有看到什么时候应该使用的解释。 我的问题是,什么时候应该使用Throwable ,什么时候应该使用new Exception() ? 编辑:在catch或else块使用: throw throwable; 要么 throw new Exception();

抛出或尝试+捕获

当决定是否将throws子句添加到方法或使用try-catch时,一般的经验法则是什么? 从我自己读过的内容来看,当调用者打破了合同结束时(被传递的对象),应该使用这个throws,并且当在一个正在进行的操作中发生exception时,应该使用try-catch方法。 它是否正确? 如果是这样,来电方应该做些什么? PS:通过谷歌和SOsearch,但要在这一个明确的答案。