草庐IT

c++ - 你能不用 goto 重写这段代码吗

伙计们,我在一个遍历树的大while循环中有以下代码。这是我可以获得此例程的最快速度,但我必须使用goto。我不是从根本上反对goto,但如果我能避免它们,我愿意。(拜托,我不是要挑起一场口水战。)约束条件:current=current->child()开销很大(它是一个shared_ptr)所以我想不惜一切代价尽量减少该操作的使用。操作后current应该是它找到的最后一个child。cnt必须计算它遇到的每个child。cnt++将被一些其他操作(或多个操作)取代,并且应该只出现一次:)代码:insideloopy:cnt++;if(current->hasChild()){cu

c++ - 为什么这段代码会出现 "exception spec is more lax than base"错误?

尝试使用Xcode6.1中的clang版本(基于LLVM3.5svn的clang-600.0.54)编译以下代码,使用-std=c++11和-stdlib=libc++给我一些我不太明白的错误。#includestructImpl{typedefstd::functionL;Ll;inti;};structHndl{Impl*impl;Hndl(Impl*i):impl(i){}~Hndl()noexcept(false){}};intmain(intargc,char*argv[]){Hndlh(newImpl());h.impl->l=[=]{h.impl->i=42;};retu

c++ - 为什么这段代码可以编译?

确定嵌套在其他对象的私有(private)部分中的对象的访问权限的确切规则是什么?例如,在下面截取的代码中,proxy_t结构嵌套在abc_t的私有(private)部分中,但其方法可用于main功能。为什么它可以编译?#include#includeusingnamespacestd;classabc_t{private:structproxy_t{proxy_toperator()(double&a,double&b){__a=a;__b=b;return*this;}doublea(){return__a;}doubleb(){return__b;}private:double_

c++ - 为什么这段 C++ 代码会出现 "illegal token"编译时错误?

在我的应用程序(在VisualC++2010下编译)中,我在头文件中有这样的代码://example.h#pragmaonce#includenamespacemyspace{//Agenericequalitytesttemplateinlineboolequal(constT&v1,constT&v2,constT&eps=std::numeric_limits::epsilon()){return(v1==v2);}//Templatespecializationforfloating-pointnumberstemplateboolequal(constfloat&v1,con

c++ - 这段代码如何创建一个只有私有(private)构造函数的类的实例?

我正在开发一个声音库(使用OpenAL),并从FMOD提供的界面中获得灵感,您可以看到界面atthislink.我提供了一些概念,例如:Sound、Channel和ChannelGroup,正如您通过FMOD接口(interface)看到的那样,所有这些类都有一个私有(private)构造函数,例如,如果您要创建一个Sound,您必须使用函数createSound()由System类提供(与创建Channel或ChannelGroup相同)。我想提供一个类似的机制,但我不明白它背后是如何工作的。例如,createSound()函数如何创建新的Sound实例?构造函数是私有(privat

c++ - 这段代码做了什么,为什么编译?

我正在用C++创建一个Vector2类作为模板,我想将+运算符定义为可以简单地添加两个vector的非成员友元函数。这是我的Vector2模板类中的友元声明:templatefriendVector2operator+(constVector2&lhs,constVector2&rhs);这包含在.hpp文件中,但实现在单独的.cpp文件中:templateVector2operator+(constVector2&lhs,constVector2&rhs){returnVector2(lhs.x_+rhs.x_,lhs.y_+rhs.y_);}此编译没有任何警告,但是,它似乎不起作用

c++ - 这段代码有内存泄漏吗?

我有这个代码:inttim=10000;//somerandomnumbertm*now=localtime(&tim);printf("Dateis%d/%02d/%02d\n",now->tm_year+1900,now->tm_mon+1,now->tm_mday);printf("Timeis%02d:%02d\n",now->tm_hour,now->tm_min);我想知道它是否有内存泄漏的原因是localtime返回一个指向结构的指针,这意味着它分配内存。但没有人发布它。此代码是否存在内存泄漏? 最佳答案 您不必(也不

c++ - 这段代码会导致 UB 吗?

这个问题在这里已经有了答案:std::string::c_str()andtemporaries(3个答案)关闭6年前。我检查了gcc和clang,两者都没有产生任何警告。我想foo()的临时生命周期将延长,直到完整表达式结束,这是bar函数调用中的分号所在的位置。#include#includestructA{std::stringfoo()const{return"aaa";}};voidbar(constchar*c){std::cout

c++ - 有人可以解释一下这段代码中使用 BaseTypeX::BaseTypeX 吗?

我有一些代码正在执行以下操作,但我不明白usingBaseTypeX::BaseTypeX其实就是在这段代码中做的。其余部分我都理解,所以请不要解释模板特化等。templateclassClassX:publicInternal::ClassXImpl{public:usingBaseTypeX=Internal::ClassXImpl;usingBaseTypeX::BaseTypeX;//whatisthisdoingexactly?inlineClassX()noexcept=default;//memberfunctiontemplateinlineClassX(TThis*a

c++ - 为什么这段代码没有收缩转换,导致错误?

g++与-std=c++11似乎接受它:#include#includestd::vectorvf={1,2,3};//Isn'tthisnarrowing(i.e.,anerror)?intmain(){}似乎带有注释的行应该出错,但实际上并没有。更新感谢Jesse指出标准(8.5.4p7)定义了为什么这是可以的。下面是一些示例代码,有助于阐明标准定义的行为:constintv5=5;intv6=6;vectorvd1={1,2,3,4};//OKvectorvd2={1,2,3,4,v5};//StillOK,v5isconstvectorvd3={1,2,3,4,v5,v6};/