草庐IT

Try-finally

全部标签

java - Kotlin for android 和 static final 内部类

我正在尝试在Kotlin上重写我的android应用程序,并且在转换ContentProvider契约(Contract)类时遇到了问题。所以我有简单的契约(Contract)类(内容类型和内容uris等默认内容被省略):publicfinalclassContract{publicstaticfinalclassContacts{publicstaticfinalStringNAME="Name"publicstaticfinalStringBIRTH="Birth"publicstaticfinalStringIMAGE="Image"}}如果我理解正确,在Kotlin中我们没有静

java - Kotlin for android 和 static final 内部类

我正在尝试在Kotlin上重写我的android应用程序,并且在转换ContentProvider契约(Contract)类时遇到了问题。所以我有简单的契约(Contract)类(内容类型和内容uris等默认内容被省略):publicfinalclassContract{publicstaticfinalclassContacts{publicstaticfinalStringNAME="Name"publicstaticfinalStringBIRTH="Birth"publicstaticfinalStringIMAGE="Image"}}如果我理解正确,在Kotlin中我们没有静

c++ - 是什么导致这种在 try block 展开期间抛出析构函数的奇怪行为?

当tryblock遇到异常时,堆栈将展开。如果在tryblock中创建了一个对象,则调用析构函数。如果析构函数抛出另一个异常,则不会捕获此异常并终止程序。如果你有:structA{~A()noexcept(false){std::cout然后你的try-catchblock是这样的:try{Aa1;Aa2;}catch(...){}然后当tryblock结束时,a2的析构函数抛出异常,异常被捕获,然后a1的析构函数抛出并终止程序。一切都按预期进行。但是,如果您引入另一个结构,该结构也抛出析构函数,但继承自A或具有A的实例作为成员,事情就会变得困惑。例如,如果您有:structB:A{~

kotlin - 我自己对 Kotlin 的 try-with-resources 缺席的解决方案

Kotlin为Closeable对象提供了use函数,但似乎他们忘记考虑AutoCloseable(例如DB准备语句)进行尝试-with-resources完全等同于Java。我已经实现了下一个“自制”解决方案:inlinefuntrywr(closeable:T,block:(T)->R):R{try{returnblock(closeable);}finally{closeable.close()}}那你就可以用下一种方式了:funcountEvents(sc:EventSearchCriteria?):Long{returntrywr(connection.prepareStat

kotlin - 我自己对 Kotlin 的 try-with-resources 缺席的解决方案

Kotlin为Closeable对象提供了use函数,但似乎他们忘记考虑AutoCloseable(例如DB准备语句)进行尝试-with-resources完全等同于Java。我已经实现了下一个“自制”解决方案:inlinefuntrywr(closeable:T,block:(T)->R):R{try{returnblock(closeable);}finally{closeable.close()}}那你就可以用下一种方式了:funcountEvents(sc:EventSearchCriteria?):Long{returntrywr(connection.prepareStat

c++ - c++ `override`/`final` 说明符的反义词是什么?

在c++11中overridespecifier防止不覆盖预期的虚拟基函数(因为签名不匹配)。finalspecifier防止无意中覆盖派生类中的函数。=>是否有说明符(可能是first或no_override)防止覆盖未知的基函数?当一个虚函数被添加到一个基类时,我想得到一个编译器错误,这个基类的签名与派生类中已经存在的虚函数具有相同的签名。编辑4:为了保持这个问题的简单性和相关性,这里又是原始伪代码抽象classB:A具有private:virtualvoidfooHasBeenDone()=0;classC:Bimplementsprivate:virtualvoidfooHas

c++ - 使用 try-Catch 异常处理程序和 if else 条件检查之间的区别?

这个问题在这里已经有了答案:IsthereageneralconsensusintheC++communityonwhenexceptionsshouldbeused?[closed](11个答案)关闭9年前。我在很多地方都使用过if...else语句,但是我对异常处理还是陌生的。这两者的主要区别是什么?例如:int*ptr=new(nothrow)int[1000];if(ptr==NULL){//Handleerrorcaseshere...}或try{int*myarray=newint[1000];}catch(exception&e){cout所以我们在这里使用标准异常类,它

c++ - 为什么 try...catch 需要抛出 EXACT 类型

我可以做到,没问题:longlngval=3L;inti=lngval;但如果我尝试这样做:try{throw3L;}catch(inti){cout我得到一个未处理的异常。这似乎不一致。这种情况下没有类型转换的原因是什么? 最佳答案 在第一种情况下,编译器可以准确地告诉您要做什么:将long转换为int。在第二种情况下,编译器必须假设您可能有这样的构造:try{try{throw3L;}catch(inti){/*P*/}}catch(longl){/*Q*/}这个想法是编译器永远不知道是否有一个catch(longl)潜伏在当前

c++ - try block 限制 const 变量的范围

当包装一个常量的初始化时,我经常遇到范围问题try{constintvalue=might_throw();}std::cout目前我使用临时值作为解决方法。有没有更好的方法来处理const-try{}情况?inttmp;/*I'dratherhavetmpconst*/try{tmp=might_throw();}catch(...){/*dosomething*/}constintvalue=tmp; 最佳答案 代替你的inttmp;/*I'dratherhavetmpconst*/try{tmp=might_throw();}

c++ - 为什么 C++ 禁止 final 类的私有(private)继承?

C++11向C++引入了final关键字。它可以用于虚方法或类。将类声明为final禁止任何类型的继承:公共(public)的、protected和私有(private)的。structAfinal{};classB:privateA{};error:base'A'^ismarked'final'虽然禁止公共(public)继承是合理的(例如,如果我的类没有虚拟析构函数,或出于其他原因),但我为什么要禁止私有(private)继承?如果final禁止仅公共(public)继承,那么std::string和它在std中的其他friend可能是final--他们应该--因为没有虚拟析构函数