草庐IT

c++ - std::runtime_error::runtime_error(const std::string&) 如何满足 std::exception 对 throw() 的要求?

std::exception要求其构造函数是throw()。然而std::runtime_error接受一个std::string作为它的参数,这表明它在某处存储了一个std::string。因此,必须在某处进行分配或复制构造。对于std::string,这不是nothrow操作。那么runtime_error::runtime_error是如何满足throw()的呢?(对于上下文,我正在实现一个异常类型,并且想从调用站点存储一些std::strings,我想正确地做到这一点......) 最佳答案 (Here's在极简测试用例中同

c++ - 在 C++ 中, “throw” 和 “throw ex” 之间有区别吗?

我想问thisquestion(也是here),但这次是关于C++。C++和C++有什么区别try{/*somecodehere*/}catch(MyException&ex){throwex;}//notjustthrow和try{/*somecodehere*/}catch(MyException&ex){throw;}//notthrowex它只是在堆栈跟踪中吗(在C++中无论如何都不是C#或Java中的标准)?(如果有什么不同,我使用MSVS2008。) 最佳答案 throw;重新抛出它捕获的同一个异常对象,而throwex

c++ - 在 C++ 中, “throw” 和 “throw ex” 之间有区别吗?

我想问thisquestion(也是here),但这次是关于C++。C++和C++有什么区别try{/*somecodehere*/}catch(MyException&ex){throwex;}//notjustthrow和try{/*somecodehere*/}catch(MyException&ex){throw;}//notthrowex它只是在堆栈跟踪中吗(在C++中无论如何都不是C#或Java中的标准)?(如果有什么不同,我使用MSVS2008。) 最佳答案 throw;重新抛出它捕获的同一个异常对象,而throwex

C++ STL 堆栈问题 : Why does pop() not throw an exception if the stack is empty?

如果堆栈为空且没有可弹出的内容,为什么std::stack::pop()不抛出异常?(我正在为我自己的代码设计一个专门的堆栈,并且想知道这种方法(需要手动检查堆栈是否为空)与抛出异常之间的权衡。我的猜测是,尽管C++支持异常处理,但它的运行时开销很小,因此,为了获得最佳性能,决定不在std::stack::pop中抛出异常)。 最佳答案 我认为pop()不必抛出异常的原因与效率或性能无关,而是与异常有关。正如所争论的elsewhere:SGIexplanation:http://www.sgi.com/tech/stl/stack.

C++ STL 堆栈问题 : Why does pop() not throw an exception if the stack is empty?

如果堆栈为空且没有可弹出的内容,为什么std::stack::pop()不抛出异常?(我正在为我自己的代码设计一个专门的堆栈,并且想知道这种方法(需要手动检查堆栈是否为空)与抛出异常之间的权衡。我的猜测是,尽管C++支持异常处理,但它的运行时开销很小,因此,为了获得最佳性能,决定不在std::stack::pop中抛出异常)。 最佳答案 我认为pop()不必抛出异常的原因与效率或性能无关,而是与异常有关。正如所争论的elsewhere:SGIexplanation:http://www.sgi.com/tech/stl/stack.

c++ - catch block 外的 "throw;"有什么作用?

我只是偶然发现了这段代码:voidsomefunction(){throw;}我想知道:这是什么意思? 最佳答案 意图可能是somefunction()只在某个catchblock内被调用。在这种情况下,当throw;被执行时会有一个异常事件,在这种情况下,当前异常会被重新抛出,被下一个可以处理该异常类型的外部处理程序捕获。如果在异常未激活时执行throw;,它会调用terminate()(N4810,§[expr.throw]/4)。 关于c++-catchblock外的"throw;

c++ - catch block 外的 "throw;"有什么作用?

我只是偶然发现了这段代码:voidsomefunction(){throw;}我想知道:这是什么意思? 最佳答案 意图可能是somefunction()只在某个catchblock内被调用。在这种情况下,当throw;被执行时会有一个异常事件,在这种情况下,当前异常会被重新抛出,被下一个可以处理该异常类型的外部处理程序捕获。如果在异常未激活时执行throw;,它会调用terminate()(N4810,§[expr.throw]/4)。 关于c++-catchblock外的"throw;

c++ - Linux乐观malloc : will new always throw when out of memory?

我一直在阅读有关Linux内存不足的情况,手册页中的以下段落让我思考:Bydefault,Linuxfollowsanoptimisticmemoryallocationstrategy.Thismeansthatwhenmalloc()returnsnon-NULLthereisnoguaranteethatthememoryreallyisavailable.Thisisareallybadbug.Incaseitturnsoutthatthesystemisoutofmemory,oneormoreprocesseswillbekilledbytheinfamousOOMkill

c++ - Linux乐观malloc : will new always throw when out of memory?

我一直在阅读有关Linux内存不足的情况,手册页中的以下段落让我思考:Bydefault,Linuxfollowsanoptimisticmemoryallocationstrategy.Thismeansthatwhenmalloc()returnsnon-NULLthereisnoguaranteethatthememoryreallyisavailable.Thisisareallybadbug.Incaseitturnsoutthatthesystemisoutofmemory,oneormoreprocesseswillbekilledbytheinfamousOOMkill

c++ - 带有 try-catch-rethrow 的代码是否等同于不带 try-catch 的代码?

以下两种代码在什么情况下不等价?{//somecode,maythrowand/orhavesideeffects}try{//samecodeasabove}catch(...){throw;}edit澄清一下,我对(i)与上述模式的偏差(例如catchblock中的更多代码)不感兴趣,也不(ii)打算邀请有关适当的光顾评论try-catchblock的用法。我正在寻找有关C++标准的合格答案。这个问题是由Cheersandhth.-Alf的评论提示的。至thisanswerofmine,声明没有进一步解释上述代码不等价。edit他们确实是不同的。堆栈展开将在后者中完成,但不一定在前