草庐IT

BeanShell断言

全部标签

c++ - 破坏 Glib::RefPtr 会导致 GTK 3 核心中的断言失败

来自Gtkmm的人是comparingGlib::RefPtr与std::auto_ptr:Glib::RefPtrisasmartpointer.Specifically,itisareference-countingsmartpointer.Youmightbefamiliarwithstd::auto_ptr,whichisalsoasmartpointer,butGlib::RefPtrismuchsimpler,andmoreuseful.但是由于某些奇怪的原因,我无法使用RefPtr完成我的工作。.相同的代码适用于auto_ptr.在下面的代码中,SmartPtr只是这两个

c++:静态断言检查使用的const是否在预定义列表中

如何解决这个问题:我有预定义的常量整数列表:constautonumbers={1,5,10};我想使用static_assert(编译时)来检查是否有其他一些常量值:#defineSOME_IDENTIFIER1在列表中。你会怎么做?可能吗?谢谢! 最佳答案 C++2a:constexprstd::arraynumbers{1,5,10};constexprintsome_id=1;static_assert(std::any_of(numbers.begin(),numbers.end(),[](constauto&x){ret

c++ - [C++ 编译时断言] : Can we throw a compilation error if some condition is not met?

我写了一个函数:templatevoidtryHarder(){for(inti=0;i但我只希望它在N介于0和10之间时编译。我可以这样做吗?怎么办? 最佳答案 您可以使用static_assertdeclaration来完成:templatevoidtryHarder(){static_assert(N>=0&&N此功能仅在C++11之后可用。如果您坚持使用C++03,请查看Boost'sstaticassertmacro.整个想法都是很好的错误信息。如果您不关心这些,或者甚至负担不起boost,您可以执行以下操作:templa

c++ - 调试断言失败表达式 : _pFirstBlock == pHead using OpenCV and C++ trying to call SurfFeatureDetector

我在使用OpenCV的C++中有这个函数:vectortest(Matimg){intminHessian=400;SurfFeatureDetectordetector(minHessian);vectorvKeypoints;detector.detect(img,vKeypoints);returnvKeypoints;}当我在主方法中调用此函数时,一切正常。intmain(int,char**argv){//pathtoaimage-filechar*input="image.jpg";//readimageintoMatimgMatimg=imread(input,CV_LO

c++ - countNonZero 函数在 openCV 中给出断言错误

我尝试使用countNonZero()函数获得水平投影,如下所示。Matsrc=imread(INPUT_FILE,CV_LOAD_IMAGE_COLOR);MatbinaryImage=src.clone();cvtColor(src,src,CV_BGR2GRAY);Mathorizontal=Mat::zeros(1,binaryImage.cols,CV_8UC1);for(inti=0;i(0,i)=countNonZero(roi);cout>"(0,i);}但是在调用countonZero()函数的那一行发生了错误。错误如下。OpenCVError:Assertionfa

c++ - 如果断言失败,策略是什么

断言用于检查是否满足条件(前置条件、后置条件、不变量)并帮助程序员在调试阶段发现漏洞。例如,voidf(int*p){assert(p);p->do();}我的问题是我们是否需要假设在Release模式下无法满足条件并相应地处理这种情况?voidf(int*p){assert(p);if(p){p->do();}}毕竟,断言意味着它测试的条件永远不应该为假。但是,如果我们不检查它而它失败了,程序就会崩溃。听起来像是进退两难。你们是怎么处理的? 最佳答案 如果断言失败,程序应该崩溃。断言失败意味着程序员在理解程序流程如何继续进行时犯了

c++ - 协助避免断言......总是!

在C和C++中,assert是一个非常重量级例程,将错误写入stdout并终止程序。在我们的应用程序中,我们实现了一个更强大的assert替代品,并为其提供了自己的宏。已尽一切努力用我们的宏替换assert,但是仍有许多方法可以重新引入assert(例如,从内部第三方库、朴素注入(inject)等).)关于我们如何减少、限制甚至根除assert的使用有什么建议吗?最好的答案将是编译器可以为我们捕获的答案,这样我们就不必像现在这样照看代码库了。 最佳答案 实际上,我不确定我是否真的理解这个问题。断言只有在它们失败时才会很昂贵,无论如何

c++ - 断言宏的解释

我无法对答案本身发表评论,因此:关于Usingcommatopreventtheneedforbracepair#defineMY_ASSERT(expr)((expr)||(debugbreak(),0))Heredebugbreak()returnsvoid,butwestillwishtohave0asanrvalue.(debugbreak(),0)如何返回0?我理解debugbreak()的返回值被丢弃返回0,但是debugbreak产生了异常,那么之后怎么求值呢?我想我的问题可以推广到任何类似的二元运算符,其中被评估的第一部分退出程序。 最佳答案

c++ - 为什么更喜欢基于模板的静态断言而不是基于 typedef 的静态断言?

有两个widelyused没有内置static_assert的C++版本的静态断言实现。第一个在Boost中使用,使用atemplateandaspecializationofthattemplate:templatestructstatic_assert;templatestructstatic_assert{};//onlytrueisdefined#defineSTATIC_ASSERT(x)static_assert()这里,一旦要检查的条件为假,编译器就无法找到模板的通用版本,编译失败。第二个使用typedef:#defineSTATIC_ASSERT(x)typedefch

c++ - 如何在 Visual Studio 中的第一个断言失败时停止?

如何在VisualStudio中的第一个断言失败时停止?当我调试时,对于每个失败的断言,我都会弹出窗口一个在另一个之上。但我不想要这种行为,我需要程序在第一个失败的断言处停止,这样我就可以从那里进行调试。谢谢 最佳答案 确保您启用了native调试器:在解决方案资源管理器中选择您的项目,然后选择调试>您的项目属性(在底部)。从左侧菜单中选择Debug,然后在EnableDebuggers下确保类型是Mixed或Native.确保断言失败。前往:VS2015:菜单->调试->Windows->异常设置VS2015之前:调试>异常,展开