草庐IT

c++ - 这段代码是否会产生物化的基纯右值,它应该编译吗?

以下代码在gcc9.1中编译godbolt但不是clang8godbolt:classA{protected:~A()=default;};classBfinal:publicA{};intmain(){autob=B{};}Clang的错误::10:16:error:temporaryoftype'A'hasprotecteddestructorautob=B{};^:3:5:note:declaredprotectedhere~A()=default;^哪个是正确的,为什么? 最佳答案 感谢评论中的澄清;从C++17开始,B{}

c++ - 这段编译良好的荒谬代码是 Clang 和 GCC 中的错误吗?

这个问题在这里已经有了答案:Injectedclassnamecompilerdiscrepancy(3个答案)关闭6年前。我今天在研究模板,看看能否让编译器从其内部类之一推断出外部类的类型。我没有找到我的解决方案(我怀疑这是不可能的),但是在尝试修复错误时我遇到了非常奇怪的行为,我将其简化为以下代码片段。structA{structB{};templatestructEverythingIsFine{usingOuter=T;usingInner=typenameT::B::B::B::B::B::B;};usingItWillBeOkay=EverythingIsFine;//Pr

c++ - 这段代码定义明确吗?

我怀疑根据C++标准(假设C++0x),以下函数链接会导致未指定的序列。只是想要确认,如果有人可以提供解释,我将不胜感激。#includestructTFoo{TFoo(int){std::cout*编辑:删除了函数的__fastcall说明符(不需要/与问题无关)。 最佳答案 未指定评估顺序。草案相关部分C++0xspec是1.9,第14和15段:14Everyvaluecomputationandsideeffectassociatedwithafull-expressionissequencedbeforeeveryvalue

c++ - 如何在不使用 boost 的情况下重写这段代码?

我的任务是修改SergiuDotenco的WellEquidistributedLong-periodLinear(WELL)algorithm不使用boost的代码(并不是说boost不好,但由于某些公司的政策,我必须将其删除)。现在,Sergiu的WELL使用的是boost的mpl库,这背后有相当多的逻辑。所以一种方法是阅读所有这些,然后我自然就能完成任务。另一种方法是,用一些最佳猜测一点一点地替换。我正处于第二种方式,希望这种试错法会更快。到目前为止,我已经成功地将boost::mpl::if_和if_c替换为std::conditional,但是在尝试更新时遇到错误IsPowe

c++ - 不理解这段代码(无条件运行)

我正在学习C++,但在我读过的任何一本书中都没有真正看到这一点。我想阅读和评论代码,以便我可以更好地学习,并遇到了一段奇怪的代码,它运行但没有条件。根据我阅读的内容(以及我使用其他语言的经验,您需要一个if、while、for或somethingforblocks)。我正在查看tbb线程包,所以我不确定它是否与启动线程或特定于c++相关(如果您不认为这是c++中常见的东西,那么它可能特定于tdd)。我想我明白里面的代码实际上做了什么,但我不确定它是如何被触发或运行的。有任何想法吗?这是部分:{//thisisthegraphpartofthecodeGraphg;g.create_ra

c++ - 为什么这段代码对 char * 很快?

在thistalkbySutter在1:15:26出现了如下代码,classemployee{std::stringname_;public:template,std::string>::value>>voidset_name(String&&name)noexcept(std::isnothrow_assignable::value){name_=std::forward(name);}}我知道std::forward是如何工作的,如果name是一个左值,name_将被复制构造;如果name是一个右值,name_将被构建。但是在幻灯片中它还说Optimizedtostealfromr

c++ - 为什么这段代码在调试时慢了 100 倍?

我正在使用MSVC2010。我正在尝试从列表中删除重复项(不保留任何一个)为什么这段代码在Debug模式下会慢100倍?是否有任何其他方法可以删除所有等效的对象并使其在Debug模式下更快?我现在无法使用调试。处理需要几分钟,而发布只需几秒钟。voidSomeFunction(){std::listlist;std::list::iteratorit1;std::list::iteratorit2;for(it1=list.begin();it1!=list.end();it1++){for(it2=list.begin();it2!=list.end();it2++){if(it1-

c++ - 为什么这段代码会使 VC++ 编译器崩溃?

我正在使用以下编译器:MicrosoftVisualC++2010以下代码在编译时使编译器崩溃:templatevoidcrasher(T_a,decltype(*a)*dummy=0){}intmain(){crasher(0);return0;}decltype(*a)*用于执行T_成为类似指针的类型-例如char*,int*,和shared_ptr.为什么会崩溃?这是已知错误吗? 最佳答案 假设你的目标是decltype(*a)*usedtoenforceT_tobeapointer-liketype-suchaschar*,

c++ - 这段 C 代码有什么作用 [Duff 的设备]?

这个问题在这里已经有了答案:HowdoesDuff'sdevicework?(11个答案)关闭2年前。voidSend(int*to,constint*from,constintcount){intn=(count+7)/8;switch(count%8){case0:do{*to++=*from++;case7:*to++=*from++;case6:*to++=*from++;case5:*to++=*from++;case4:*to++=*from++;case3:*to++=*from++;case2:*to++=*from++;case1:*to++=*from++;}whi

c# - 为什么这段代码在 Windows 7 上有效,但在 Windows XP 上却无效?

一些背景知识:我是WPF到WinForms的转换者,一段时间以来我一直在迁移我的应用程序。我的一位friend报告说我的代码在WindowsXP上无法运行(它在启动时会产生堆栈溢出),即使它在Windows7(我在其中开发)上运行良好。经过一些研究,导致问题的原因如下:privatevoidlistView1_SelectedIndexChanged(objectsender,EventArgse){listView1.SelectedIndices.Clear();listView1.Items[0].Selected=true;}现在我注意到这个明显错误的决定,我不奇怪为什么它在W