jjzjj

c++ - 有一个 throwing swap 成员实现可以吗?

编写类(使用copy-and-swap习惯用法)时的一般准则是提供一个非抛出交换成员函数。(EffectiveC++,3rdedition,Item25和其他资源)但是,如果因为我的类使用不提供交换操作的第3方类成员而无法提供nothrow保证怎么办?//Warning:Toycode!!!classNumberBuffer{public:...voidswap(NumberBuffer&rhs);public:float*m_data;size_tm_n;CStringm_desc;};voidswap(NumberBuffer&lhs,NumberBuffer&rhs){lhs.s

c++ - Boost::asio socket - 如何在 'throw' 中创建 read_some "timeout"?

所以通常我们会做这样的事情socket.read_some(boost::asio::buffer(buffer,buffer_size));但是如何让它在读取还没有开始的情况下抛出异常比说333秒更长的时间? 最佳答案 您应该考虑使用async_read_some而不是read_some,因为它允许您在读取的同时启动一个新的后台计时器。然后,为您执行的每个新套接字创建一个新计时器:boost::asio::io_serviceio_service;time_t_timertimer(io_service);timer.expire

c++ - 米斯拉-C++ :2008[8-4-3] : return in all exit path in function

在测试我的代码(静态分析)以查看我是否尊重misrac++2008时,我收到以下错误Functiondoesnotreturnavalueonallpaths.函数看起来像int*Dosomething(stringv){int*retvalue=NULL;if(0==exists(v)){throw("error:valuedoesn'texist");}else{retvalue=dosomecomputations(v);}returnretvalue;}我真的需要抛出一个异常,因为调用者应该根据错误做一些事情。可能的错误列表可能很大,而且不仅仅是该代码示例中的值不存在。我该如何

c++ - std::_throw_out_of_range 不知从何而来

我是C++的绝对初学者。字面上地。才过了一个星期。今天我在写一个程序来测试需要多少次迭代才能使某个数字回文。这是代码:#include#include#include/*Thisprogramcalculatesthestepsneededtomakeacertainnumberpalindromic.Itisdesignedtooutputthevaluesfornumbers1to1000*/usingnamespacestd;classnumber{public:stringvalue;voidreverse();};voidnumber::reverse(){std::reve

c++ - googletest 中没有合适的默认构造函数 EXPECT_NO_THROW

声明:classClassOne{ClassOne(ClassTwo*classTwo,ClassThreeconst&classThree);}测试:ClassTwo*classTwo;ClassThreeclassThree;EXPECT_NO_THROW(ClassOne(classTwo,classThree));这会编译并运行,但现在我将其更改为:声明:classClassOne{ClassOne(ClassThreeconst&classThree);}测试:ClassThreeclassThree;EXPECT_NO_THROW(ClassOne(classThree))

函数声明后的 C++ throw() (_NOEXCEPT)

我在VisualC++中看到包含文件使用throw()在函数之后:size_typecapacity()const_NOEXCEPT{//returncurrentlengthofallocatedstoragereturn(this->_Myend-this->_Myfirst);}随着_NOEXCEPTthrow()的宏,所以上面看起来像:size_typecapacity()constthrow(){//returncurrentlengthofallocatedstoragereturn(this->_Myend-this->_Myfirst);}但是throw有什么作用呢?我

C++ : noexcept (or throw()) virtual destructor = default;

下面的代码是合法的吗?classC{virtual~C()noexcept=default;};或classC{virtual~C()throw()=default;};(throw()已弃用,但我的编译器不支持noexcept;;) 最佳答案 8.4.2[dcl.fct.def.default]Anexplicitly-defaultedfunction[...]mayhaveanexplicitexception-specificationonlyifitiscompatible(15.4)withtheexception-spe

c++ - 地址 sanitizer : "SEGV on unknown adress" when using throw-catch and printf

当我扔东西时,例如一个int或一个charconst*,并使用printf检查错误,我得到一个AddressSanitizerError。我无法在网上找到任何类似的东西,而且我的代码示例非常基础,以至于我真的不明白它怎么可能会产生错误。精简代码示例:#includeintmain(){try{throw42;}catch(intmsg){printf("%d\n",msg);}return0;}运行代码时的控制台输出:ASAN:SIGSEGV===================================================================16533=

c++ - lambda 函数不是 throw_move_assignable 吗?

clang-cl(4.0.0-trunk)似乎认为是,而vc2015(update3)认为不是。此实现是否已定义或标准是否规定了lambda函数应如何在术语或nothrow和moveassignable中实现?#include#includetemplatevoidtest_nothrow_move_assignable(T&&){std::cout::value 最佳答案 这是clang错误。来自[expr.prim.lambda]:Theclosuretypeassociatedwithalambda-expressionhas

c++ - 异常类复制构造函数

我正在测试在执行堆栈展开调用std::terminate时如何抛出,方法是使用用于抛出的类的复制构造函数,抛出。根据C++14N4296-§15.1.3:Throwinganexceptioncopy-initializes(8.5,12.8)atemporaryobject,calledtheexceptionobject.Thetemporaryisanlvalueandisusedtoinitializethevariabledeclaredinthematchinghandler(15.3).classX{public:X()=default;X(constX&){throws