我试图将长度的当前值作为默认参数作为函数参数传递。但是编译器显示错误"'this'maynotbeusedinthiscontext"谁能告诉我我犯了什么错误。?classA{private:intlength;public:A();voiddisplay(intl=this->length){cout 最佳答案 您的成员函数:voiddisplay(intl=this->length)在概念上等同于:voiddisplay(A*this,intl=this->length);//translatedbythecompiler这意味
我正在使用独立的Asio和C++11创建一个C++服务器应用程序,但遇到错误,这就是我寻求帮助的原因。错误在类里面worker_thread,在通话期间shared_from_this(),一个bad_weak_ptr引发异常,导致程序崩溃。布局类(class)connection_manager创建并存储std::shared_ptr类型的对象在std::vector里面容器类(class)worker_thread继承自std::enable_shared_from_this.类(class)worker_thread创建std::shared_ptr类型的对象.类(class)c
如何以及何时调用父类(superclass)方法?两个选项请引用代码段:classSuperClass{public:voidmethod();};classSubClass:publicSuperClass{public:voidsomeOtherMethdo(){this->method();SuperClass::method();}}; 最佳答案 使用this->method()调用一个函数,该函数要么在您的父类(superclass)中实现,要么由您自己的类实现。当使用superClass::method()时,您一定要调
我有以下类接口(interface):classTime{public:Time(int=0,int=0,int=0);Time&setHour(int);Time&setMinute(int);Time&setSecond(int);private:inthour;intminute;intsecond;};实现在这里:Time&Time::setHour(inth){hour=(h>=0&&h=0&&m=0&&s在我的主.cpp文件中,我有这段代码:intmain(){Timet;t.setHour(18).setMinute(30).setSecond(22);return0;}
structSomething{inta;intb;Something(char*buffer){memcpy(this,buffer,sizeof(Something));};};这合法吗?安全的?对我来说它看起来不错,但我不确定C++标准是否以某种方式禁止它。 最佳答案 ...fromthefactthatit'snolongeraPODtypeafterIaddedtheconstructor.这不是事实(只是假新闻;-))。添加构造函数不会更改struct的POD类型状态。您还可以使用static_assert轻松检查:st
在时间等待场景中:oursoftwareworksinthebackground,andsynchronizesdatawiththeserverinevery20-30minutes.我想用std::this_thread::sleep_for但我的上级强烈反对任何形式的sleep功能。他推荐std::condition_variable::wait_until(lock,timeout-time,pred)不知道在这种情况下sleep_for有什么缺点吗? 最佳答案 正如评论中已经指出的那样,这仅取决于您的用例。两者之间的主要区
考虑以下代码:structS{intx;voidf(){autol=[&](){x=42;};//thisisimplicitlycapturedhere}};§5.1.2/14指出:Anentityiscapturedbycopyifitisimplicitlycapturedandthecapture-defaultis=orifitisexplicitlycapturedwithacapturethatdoesnotincludean&.因此我得出结论,this不是通过复制捕获。但随后通过§5.1.2/15:Anentityiscapturedbyreferenceifitisi
如果我想创建一个shared_ptr在从基类继承的层次结构中的派生类成员函数中,我可以使用shared_from_this和static_pointer_cast:classBase:publicstd::enable_shared_from_this{};classDer:publicBase{public:std::shared_ptrmake_SP_to_Me(){returnstd::static_pointer_cast(shared_from_this());}};我担心的是static_pointer_cast通过lvalue-ref-to-const接受它的参数,所以当
在他的talk在CppCon上,RichardSmith提到尽管ModuleTS支持目前正在进行中,但它已经可以使用了。所以我从svn构建了clang4.0,并在一个非常简单的示例上进行了尝试。在我的myclass.cppm文件中,我为int定义了一个简单的包装器modulemyclass;exportclassMyClass{public:MyClass(inti):_i{i}{}intget(){return_i;}private:int_i;};和我的main.cpp只是创建该类的一个实例,并将其保存的int输出到std::cout。#include#includeimportm
在C++中,可以在括号内声明变量,例如int(x)=0;。但似乎如果您使用this而不是变量名,则使用构造函数代替:A(this);调用A::A(B*)。那么第一个问题就是为什么this不一样,是不是因为变量不能命名为this?让事情变得复杂一点,让我们把this放在lambda中-structB;structA{A(B*){}};structB{B(){[this]{A(this);}();}};现在gcc调用A::A(B*),msvc打印关于缺少默认构造函数的错误,clang打印expectedexpression(https://godbolt.org/g/Vxe0fF)。它在m