草庐IT

non-throwing

全部标签

c++ - 使用 throw_with_nested 并捕获嵌套异常

我真的很喜欢c++11中的std::throw_with_nested,因为它模拟了java的printStackTrace()但现在我只是好奇如何捕获嵌套异常,例如:voidf(){try{throwSomeException();}catch(...){std::throw_with_nested(std::runtime_error("Insidef()"));}}voidg(){try{f();}catch(SomeException&e){//IwanttocatchSomeExceptionhere,notstd::runtime_error,:(//dosomething

c++ - 为什么将 "pointer to pointer to non-const"转换为 "pointer to pointer to const"是不合法的

将非const指针转换为const指针是合法的。那为什么将指向非const的指针转换为指向const的指针是不合法的呢?例如,为什么下面的代码是非法的:char*s1=0;constchar*s2=s1;//OK...char*a[MAX];//akachar**constchar**ps=a;//error! 最佳答案 来自标准:constcharc='c';char*pc;constchar**pcc=&pc;//notallowed*pcc=&c;*pc='C';//wouldallowtomodifyaconstobject

c++ - boost multi_index : retrieve unique values of a non-unique key

我有一个boost::multi_index_container其元素是这样的结构:structElem{Aa;Bb;Cc;};主键(在数据库意义上)是a和b的composite_key。其他键的存在是为了执行各种类型的查询。我现在需要检索一组c的所有不同值。这些值是无论如何不是唯一的,而是遍历所有条目(尽管是有序的),或者使用std::unique似乎很浪费,考虑到c的不同值的数量预计将我是否缺少更有效地获得此结果的简单方法? 最佳答案 我搜索了Boost.MultiIndex文档,但似乎无法找到一种方法来执行您想要的操作。我很想

c++ - 为什么 boost::interprocess::managed_shared_ptr to non-const 不能转换为 managed_shared_ptr to const

据我了解,以下内容对boost::shared_ptr有效:boost::shared_ptrptr;...boost::shared_ptrc_ptr=ptr;//Valid相同的行为不适用于boost::interprocess::managed_shared_ptr。为什么? 最佳答案 boost::interprocess::managed_shared_ptr实际上不是共享指针;它只是一个辅助类,您可以使用它来定义一个类的类型。来自interprocessdocs:typedefmanaged_shared_ptr::ty

c++ - 特殊成员函数是 noexcept 还是 throw()?

C++11规范明确指出隐式生成的特殊函数(即默认构造函数、析构函数、复制/移动构造函数和复制/移动赋值运算符)具有异常规范。但该规范似乎仅根据现已弃用的动态异常规范(即“throw(T1,T2,T3)”)编写。15.4/14中的示例支持这一点:structA{A();A(constA&)throw();A(A&&)throw();~A()throw(X);};structB{B()throw();B(constB&)throw();B(B&&)throw(Y);~B()throw(Y);};structD:publicA,publicB{//ImplicitdeclarationofD

c++ - 使用 Qt5 的 throw 语句即时崩溃

当我尝试在Qt中使用异常时,应用程序在任何throw语句上立即崩溃,忽略任何catch(...)-条款。这是导致崩溃的最少代码:#includeintmain(){try{throw1;}catch(...){QStringa;}}没有QString即使包含库,它也能正常工作。我得到的异常代码是40000015和偏移量:0000bb3f我将QtCreator2.7.2与Qt5.1.0和mingw4.8(QtCreator附带的版本)一起使用。我使用Windows8进行构建。在网络上进行一些研究后,我尝试添加CONFIG+=exceptions标记到*.pro文件,但仍然崩溃。当我读到Q

c++ - 非递归(non-recursive) Automake

我正在尝试将项目转换为使用非递归automake。基于对SO的搜索,我可以看到该主题已在一定程度上得到涵盖。但是关于如何将递归automake项目转换为非递归项目,实际上并没有任何问题。我已经读过KarelZak'sblog当然还有autotools-mythbuster.experiencesregardingnon-recursiveautomake有问题但它没有说明如何转换项目。唯一能解释一点的问题似乎是关于subdir-objectsoption.但是我无法用这些资源转换我的项目。因此这个问题。让我们从一个简单的项目设置开始:project/\--configure.ac|--

c++ - 避免接受 lambda 的方法的 const/non-const 重复

classFrame表示像素类型为P的图像.由于底层数据缓冲区格式的多种灵active,遍历其像素的算法并非易事。template//Pispixeltype;RM=is_row_majorclassFrame{//...templatevoiditerate(Ff){//iterateinawaythatisperformantforthisbufferif(stride==(RM?size.w:size.h)){auton=size.area();for(index_tk=0;k(stride)*(RM?size.h:size.w);for(index_tk0=0;k0我希望能够同

c++ - 规则 "A user-defined but do-nothing destructor is also a non-trivial destructor"是否过于严格?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。ImprovethisquestionclassBase{public:~Base(){}private:intval;};Basebase;//aglobalvariable你看,析构函数什么都不做,和c++编译器提供的默认析构函数一样。但是根据帖子Whatisanon-trivialdestructorinC++?,析构函数仍然是一个非平凡的析构函数我知道,标准中的每条规则都必须严格。但是,根据我粘贴的上面的代码,用户定义

c++ - 错误 : control Reaches end of non void function

我正在学习C++,我从教科书上抄了这段代码,在编译代码时,最后出现错误。错误说:ControlReachesendofnon-voidfunction它位于代码的末尾:#include"ComplexNumber.hpp"#includeComplexNumber::ComplexNumber(){mRealPart=0.0;mImaginaryPart=0.0;}ComplexNumber::ComplexNumber(doublex,doubley){mRealPart=x;mImaginaryPart=y;}doubleComplexNumber::CalculateModulu