如果这是错误的,请纠正我:在Java 7的try-with-resources语句中,资源close()方法抛出的任何异常都必须声明为我的方法抛出,或者我必须将整个try包装在另一个try捕获由异常引发的异常中close().
如果是这样,我不得不怀疑我是否会充分利用它.我当然不希望throw抛出异常close(),调用者不知道该怎么做.至少对我来说,try另一个try只是处理它的包装close()看起来不会很优雅.
编辑: 我想我不小心问了两个问题,其中一个是重复的.
问题1.我是否必须声明我的方法从方法中抛出异常close()或在另一次尝试中包装try-with-resources?(未在建议的副本中回答.)
问题2.有没有办法静默关闭资源?(显然是重复的,所以我不接受这个句子.希望这使得这个问题令人满意地独特.)
我知道这是错的:
char* getSomething() {
char szLocal[5];
/* put something in the char array somehow */
return szLocal;
}
Run Code Online (Sandbox Code Playgroud)
...因为szLocal可以在函数返回后的某个时候被销毁.
但这样可以吗?
char* getSomethingElse() {
return "something else";
}
Run Code Online (Sandbox Code Playgroud) 这听起来很基本,以至于让我觉得我自己没有努力找到答案,但我发誓我搜索了大约20分钟而没有找到答案.
如果私有c ++类成员变量(非静态)是指针,并且它未在构造函数中初始化(通过初始化列表或构造函数中的赋值),那么在完全实例化类时它的值是什么?
额外的问题:如果上述问题的答案不是NULL,并且我希望始终将特定成员指针变量初始化为NULL,并且我有多个构造函数,那么我是否真的必须在每个构造函数中对该指针进行显式初始化我写的构造函数?如果是这样,专业人士如何处理这个?当然没有人真正为所有构造函数中的同一成员添加冗余初始化程序,是吗?
编辑: 我希望我能在这里选择两个答案.Bleep Bloop推荐的智能指针似乎是最优秀的方法,并获得了最多的投票.但是由于我在工作中实际上并没有使用智能指针,所以我选择了最不具有智能指针的说明性答案作为答案.
短版: 是不是标准的行为myDiv.style.display时,我已经设置(JavaScript)的返回空白div,以display:none在主样式表,但返回"无"时,它是通过一个内嵌样式设置?
长版:
我有一些div我隐藏和取消隐藏他们的display风格,用block和之间的Javascript切换它none.他们总是从hidden(display:none)开始,我一直用内联样式设置:
<div id="anID" class="aClass" style="display:none">
stuff
</div>
Run Code Online (Sandbox Code Playgroud)
这是在none和之间切换的Javascript block.两个chOpsXXX()函数只设置divSection.style.display相反的值(以及其他内务处理):
var divSection = document.getElementById("chOpsSection" + strSectionID);
var strDisplay = divSection.style.display;
if (strDisplay == "none") {
chOpsDisplaySection(strSectionID);
} else {
chOpsHideSection(strSectionID);
}
Run Code Online (Sandbox Code Playgroud)
当我使用内联样式属性来设置初始display:none样式时,这一切都正常.
我还在主样式表中为这些div设置其他样式.所以我认为将初始状态移动display:none到所述样式表可能是有意义的.我这样做了.我不会发布它,我想你可以想象它.
但是当我这样做时,div最初是hidden(display:none),但第一次调用divSection.style.display返回一个空字符串(alert(strDisplay);返回一个空字符串,而不是null).
我上面显示的Javascript然后隐藏它(因为它不等于"none")然后下一次调用divSection.style.display返回"none"并且一切正常.(如果我inline在主样式表中将其设置为相同的行为:div初始可见,并且第一次调用divSection.style.display返回空字符串). …
我必须将org.w3c.dom.Document转换为java.lang.String.我找到了两种可能的方法,一种使用org.w3c.dom.ls.ls.LSSerializer,另一种使用javax.xml.transform.Transformer.我有下面的样品.
谁能告诉我哪种方法更受青睐?
public String docToStringUsingLSSerializer(org.w3c.dom.Document doc) {
DOMImplementationRegistry reg = DOMImplementationRegistry.newInstance();
DOMImplementationLS impl = (DOMImplementationLS) reg.getDOMImplementation("LS");
LSSerializer serializer = impl.createLSSerializer();
return serializer.writeToString(doc);
}
public String docToStringUsingTransformer(org.w3c.dom.Document doc) {
Transformer transformer = TransformerFactory.newInstance().newTransformer();
StringWriter stw = new StringWriter();
transformer.transform(new DOMSource(doc), new StreamResult(stw));
return stw.toString();
}
Run Code Online (Sandbox Code Playgroud) 我正在使用Visual Studio 2010.这......
std::regex pattern("(?i).*a.*");
...抛出这个......
std::tr1::regex_error - regular expression error
...我找不到任何说明是否std::regex支持(?i)不区分大小写的语法.
任何人都可以确认/否认(?i)不支持作为不区分大小写的前缀std::regex吗?
我在一个存储库中有一个项目.人们很快就会开始检查,研究它,然后再做出改变.但是在该项目中有一个文件(我自己设计的精心配置文件),每个人都必须有一份副本,但是他们会对它进行更改,这些更改永远不应该被检入(这是永远不应该被发送的)通过更新回到存储库).
所以,我希望签出项目的每个用户都能收到这个配置文件,但是我希望在所有提交中都忽略它.
到目前为止我所读到的内容让我觉得这是不可能的.看来,一旦我用这个配置文件导入项目,它就处于版本控制之下,除了删除它之外,再也没有办法忽略它.
我希望我只是误解了,解决方案很简单.
有人可以帮忙吗?
哦,如果可能的话,我需要一个命令行解决方案.很多工作都是在没有ssh连接的无头linux机器上完成的.
谢谢!
编辑:我去了cdhowie的答案.除了按照他的建议创建模板配置文件(例如app.config.template)之外,我还使用"svn propedit svn:ignore"来在提交时忽略真正的配置文件名(例如app.config).
简短版: 是否可以在不安装Visual C++ Redistributable Packages的情况下运行使用Visual Studio 2015编译的可执行文件,而是将运行时DLL复制到与可执行文件相同的文件夹中?
长版......
自20世纪90年代中期以来,我使用Visual C++编写了小程序,后来又编写了Visual Studio.直到Visual Studio 2013,我一直能够在任何Windows主机上运行这些程序,只要我将msvcpXXX.dll和msvcrXXX.dll放在同一目录中.我从来不需要安装Visual C++ Redistributable Packages.
现在使用Visual Studio 2015,这似乎不再有效.首先,没有msvcrXXX.dll.所以我复制了msvcp140.dll和我在Visual Studio文件夹C:\ Program Files(x86)\ Microsoft Visual Studio 14.0\VC\redist\x64\Microsoft.VC140.CRT(concrt140.dll,vccorlib140.dll)中找到的其他三个DLL ,vcruntime140.dll).仍然没有运行.
查看depends.exe让我觉得有很多依赖项在这些DLL中没有解决.我承认我有点不知所措,并没有继续挖掘我自己找出我需要满足依赖的每个DLL.但它开始感觉非常hacky,因为其中许多安装在C:\ Windows下,而不是我的Visual Studio可再发行文件夹中.
无论如何,有人可以帮忙吗?
在这篇文章中,其中一个答案建议以std::string这种方式更改案例:
std::string str = "Hello World";
std::transform(str.begin(), str.end(),str.begin(), ::toupper);
Run Code Online (Sandbox Code Playgroud)
我已经使用过它,它在Visual Studio 2010中工作到目前为止.但标准是否保证始终有效?我担心的是,我可以想象实现的可能性,写入输出迭代器(第三个参数)可能使输入迭代器(参数1和2)无效.
那么,总结一下,上述方法是安全便携的吗?
我正在为即将到来的Java servlet应用程序中的嵌入式数据库做出决定.我归结为两个最终竞争者:SQLite与SQLiteJDBC"纯Java"驱动程序与Java DB(又名Derby).
这是我的杀手级标准:应用程序必须在任何支持Java的操作系统上运行,特别是我们有Solaris,CentOS,Windows x86和Windows x64主机,它们都需要运行应用程序.安装必须只涉及将war文件复制到目标服务器的部署文件夹,然后让服务器完成剩下的工作(这只不过是将zip复制到目标服务器,然后让服务器解压缩并运行应用程序).作为安装的一部分,应该没有使用本机二进制文件,并且没有其他设置逻辑.(这实际上不是我的要求,它是公司的,对于所有基于servlet的应用程序,但我确实喜欢它).
我知道Derby(Java DB)符合上述标准.我做过一两次.但我真的很喜欢SQLite的单一文件架构,以及SQLite社区大约是Derby的20倍.我也担心甲骨文有一天会杀死德比,因为他们现在有五个竞争的数据库产品在他们的保护伞下并且永远无法继续下去.德比可能是家务开始时的第一个伤员.
所以,我正在研究SQLiteJDBC,它声称拥有SQLite的"纯Java"JDBC驱动程序.现在,我理解"纯Java"意味着没有操作系统依赖项或其他库,可以在任何操作系统上的任何JVM中运行驱动程序.所以,我去获取带有纯Java驱动程序的jar文件.作为好奇的一种,我看着它.然后我注意到它在根目录中包含4个带有".lib"扩展名的文件,如下所示:
linux-amd64.lib
linux-x86.lib
mac-universal.lib
win-x86.lib
那么,那是什么呢?这些是用于命名操作系统的本机库吗?如果是这样,我可以假设这个纯Java驱动程序只能在jar中具有适当lib文件的平台上运行吗?如果是这种情况,我可能不得不将SQLite从竞争者列表中删除,因为winX64和Solaris是我们这两个最重要的操作系统.
或许我误解了,纯Java驱动程序真的是纯Java,它会在任何JVM中运行吗?
欢迎所有回复!
先谢谢你,约翰