草庐IT

BeanShell断言

全部标签

c++ - 如何在不使用 abort() 的情况下断言()?

如果我使用assert()并且断言失败,那么assert()将调用abort(),突然结束正在运行的程序。在我的生产代码中我负担不起。有没有办法在运行时断言但能够捕获失败的断言,以便我有机会优雅地处理它们? 最佳答案 是的,事实上是有的。您需要自己编写一个自定义断言函数,因为C++的assert()正是C​​的assert(),带有abort()"功能”捆绑在一起。幸运的是,这非常简单。Assert.hhtemplateinlinevoidAssert(Aassertion){if(!assertion)throwX();}如果谓词

c++ - 有没有办法做一个 C++ 风格的编译时断言来确定机器的字节顺序?

我有一些模板化的低级序列化代码,我显然需要在编译时知道系统的字节序(因为模板专门基于系统的字节序)。现在我有一个包含一些平台定义的标题,但我宁愿通过一些模板化测试(如static_assert或boost_if)做出关于字节顺序的断言。原因是我的代码需要在各种机器、许多专业供应商的机器上编译和运行,并且可能在2008年不存在的设备上运行,所以我真的无法猜测可能需要进入那个标题年份在路上。由于代码库的预期生命周期约为10年。所以我不能永远遵循代码。希望这能说明我的情况。那么有没有人知道编译时测试可以确定字节顺序,而不依赖于供应商特定的定义? 最佳答案

c++ - 调试断言失败!表达式 : _pFirstBlock == pHead

我正在调用一个静态链接的.dll,我看到了这个错误:我编写了.dll和调用代码。不应发生此错误。我想知道是否有人以前遇到过它?.dll仅包含大约10行代码,它只是一个测试.dll,以了解dll的一般工作方式。当我将std::string从.dll中传回时,它会爆炸。我正在使用VisualStudio2012和C++。接下来我会尝试什么来自Debugassertion..._pFirstBlock==pHead:Thisproblemcanoccurifoneusesthesingle-threadinglibrariesinamultithreadedmodule.明天,我将尝试在多线

c++ - 编译时断言?

有没有一种方法可以断言两个常量表达式在编译时相等?例如我希望这会导致编译时错误enum{foo=263,bar=264};SOME_EXPRESSION(foo,bar)但我希望这不会导致错误enum{foo=263,bar=263};SOME_EXPRESSION(foo,bar)编辑:以上已简化。我的情况更像some_other_file_I_dont_control.h:classX{public:enum{foo=263};}我的文件.h:enum{bar=something+somethingelse};//barshouldequalX::fooSOME_EXPRESSIO

c++ - 如何通过 Google 测试捕捉断言?

我正在使用Google测试框架编写一些单元测试。但我想检查一些断言是否放置得当并且有用。有没有办法在Google测试中捕获断言?正在测试的示例代码:intfactorial(intn){assert(n>=0);//....}然后是测试:#includeTEST(FactorialTest,assertNegative){EXPECT_ANY_THROW({factorial(-1);});}但是EXPECT_ANY_THROW不会捕获断言,而只会捕获异常。我正在寻找捕获断言的解决方案。 最佳答案 谷歌测试提供ASSERT_DEAT

c++ - 异常与断言?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:designbycontracttestsbyassertorbyexception?在决定使用异常而不是断言(反之亦然)时,是否有一个经验法则可以遵循。现在我只会抛出我认为在用户端运行时会发生的事情(比如套接字或文件错误)。我使用的几乎所有其他东西都断言。另外,如果我要抛出一个断言,那么抛出一个好的标准对象是什么?如果我没记错的话,有std::logic_error,但这不是扔的好对象吗?我会为丢失的文件或意外输入(例如从命令行而不是前端应用程序)抛出什么? 最佳答案

c++ - 为什么要使用断言?

我从来没有断言的想法——你为什么要使用它们?我的意思是,假设我是一名方程式赛车手,所有的断言都是诸如安全带、Helm等之类的东西。测试(调试中)一切正常,但现在我们想做赛车(发布)!我们是否应该放弃所有安全性,因为测试时没有问题?我永远不会删除它们。我认为大多数声称删除与断言类似的东西的人从未分析过他们的代码,或者断言完全被取代了。我从未见过任何真正的性能优势,尤其是关于80/20规则。那么,我是否以某种方式错过了重点,或者有人可以告诉我,为什么我应该使用断言?顺便说一句,我正在使用单元测试。 最佳答案 首先,性能差异可能很大。在一

casting - 具体结构上的类型转换与类型断言?

我是golang的新手,如果这个问题太天真,请道歉。环顾四周,但找不到我的基本问题的答案。假设我有一个具体的结构和方法,如下所示。typeMyDatastruct{field1stringfield2int}func(aMyData)OperatorOnString()string{returna.field1.(string)}func(aMyData)OperatorOnInt()int{returna.field2.(int)}我的问题是,我可以键入cast并返回而不是执行断言吗?从我目前了解到的情况来看,断言用于接口(interface)类型的数据。但在这种情况下,我有具体的类

Golang如何为未知接口(interface)做类型断言?

我知道我可以通过反射获取对象的值,然后使用类型断言来取回实际对象:obj:=new(User)out:=reflect.ValueOf(obj).Elem().Interface().(User)fmt.Println(out==*obj)//true但是如果我不知道对象的类型是User,我该如何进行类型断言呢?假设它在一个函数中,例如:funcFoo(objinterface{})bool{//out:=reflect.ValueOf(obj).Elem().Interface().(...)returnout==*obj}funcmain(){obj:=new(User)fmt.P

go - panic 和断言有什么区别?

Godoesn'tprovideassertions.Theyareundeniablyconvenient,butourexperiencehasbeenthatprogrammersusethemasacrutchtoavoidthinkingaboutpropererrorhandlingandreporting.但是它有printandprintln哪个paniclikeprint,abortsexecutionafterprintingpaniclnlikeprintln,abortsexecutionafterprinting这和断言不是一回事吗?为什么他们会声称上述内容却