草庐IT

assignment-operator

全部标签

c++ - operator const char* 以奇怪的方式覆盖(?)我的另一个变量

#include#includeclassVector{double_x;double_y;public:Vector(doublex,doubley):_x(x),_y(y){}doublegetX(){return_x;}doublegetY(){return_y;}operatorconstchar*(){std::ostringstreamos;os这个程序的输出:$./a.outVectorw1(1.1,2.2)Vectorw2(3.3,4.4)Vector(3.3,4.4)Vector(3.3,4.4)我不明白为什么会得到输出。似乎是“constchar*n2=w2;”覆盖

c++ - 为什么使用单个赋值运算符处理复制和 move 赋值效率不高?

这是C++Primer第5版中的一个练习:Exercise13.53:Asamatteroflow-levelefficiency,theHasPtrassignmentoperatorisnotideal.Explainwhy.Implementacopy-assignmentandmove-assignmentoperatorforHasPtrandcomparetheoperationsexecutedinyournewmove-assignmentoperatorversusthecopy-and-swapversion.(P.544)文件hasptr.h://!aclassh

c++ - 允许成员为 const,同时仍然支持类上的 operator=

我的类中有几个成员是const,因此只能通过初始化列表进行初始化,如下所示:classMyItemT{public:MyItemT(constMyPacketT&aMyPacket,constMyInfoT&aMyInfo):mMyPacket(aMyPacket),mMyInfo(aMyInfo){}private:constMyPacketTmMyPacket;constMyInfoTmMyInfo;};我的类可以用在我们内部定义的一些容器类(例如vector)中,这些容器需要在类中定义operator=。当然,我的operator=需要做这样的事情:MyItemT&MyItemT

Object.assign详解

目录一、Object.assign是什么?二、用法:三、详细讲解1.目标对象和源对象没有同名属性2.目标对象和源对象有同名属性3.有多个源对象4、原始类型会被包装为对象5、对象的拷贝6、对象的深拷贝7、对象的深拷贝总结一、Object.assign是什么?object.assign()主要用于对象合并,将源对象中的属性复制到目标对象中,他将返回目标对象。二、用法:Object.assign(target,...sources)参数:target--->目标对象      source--->源对象返回值:target,目标对象三、详细讲解1.目标对象和源对象没有同名属性vartarget={n

c++ - 为什么不能从派生类对象访问父类的赋值运算符

例子:classC{public:voidoperator=(inti){}};classSubC:publicC{};下面给出编译错误:SubCsubC;subC=0;“'subC=0'中的'operator='不匹配”一些消息来源说这是因为赋值运算符不是继承的。但这不只是因为SubC的默认构造复制赋值掩盖了它们吗? 最佳答案 复制赋值运算符是在派生类中自动生成的。由于C++的常规名称隐藏规则,这会导致基类的赋值运算符被隐藏。您可以通过“using”指令取消隐藏基类中的名称。例如:classC{public:voidoperato

c++ - 在 C++ 中初始化变量的偏好

开始使用C++并注意到您可以通过两种方式初始化变量intexample_var=3;//withtheassignmentoperator'='或intexample_var(3);//enclosingthevaluewithparentheses是否有理由使用一个而不是另一个? 最佳答案 第一种形式可以追溯到C时代,而第二种形式是在C++中添加的。添加的原因是在某些上下文中(特别是构造函数中的初始化列表)不允许使用第一种形式。这两者并不完全等同于所有类型,这就是其中一个或另一个可能更有用的地方。第一种形式在语义上意味着从右侧创建

c++ - move std::thread

尝试制作简单的代码片段:std::threadthreadFoo;std::thread&&threadBar=std::thread(threadFunction);threadFoo=threadBar;//thread&operator=(thread&&other);expectedtobecalled出现错误:useofdeletedfunction'std::thread&std::thread::operator=(conststd::thread&)'我将threadBar明确定义为右值引用,而不是普通引用。为什么不调用预期的运算符(operator)?如何将一个线程m

c++ - 开关盒 : declaration-with-initialization & declaration-and-then-assignment

在switch-case语句中,declaration-with-initialization是无效的,但允许declaration-and-then-assignment。如以下代码片段所示。从编译器端看,这两种类型的初始化有什么区别?以及为什么第一种初始化无效而第二种初始化有效。switch(val){case0:intnewVal=42;//Invalidbreak;case1:intnewVal2;//ValidnewVal2=42;break;case2:break;} 最佳答案 实际上,规则是您不能跳入经过具有初始化的声

c++ - 为什么 C++ 不自动使用 operator== 而不是 operator!=

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。我明白C++不能为一个类自动定义operator==,但为什么它不能为使用!(a==b)a!=b当operator!=不可用但operator==可用时?我知道std::rel_ops,虽然我今天之前没有听说过它。

c++ - 为什么这个程序调用operator()而不是构造函数呢?

这是一个编译时没有警告的程序,例如GNUC++:$g++-ot-Wall-pedantic-Wshadowt.cpp$./t.exeCallingbarney::barney()Callingfoo::operator()()Callingbarney::barney()但它在MSVC++上完全无法编译:$cl/EHsct.cppMicrosoft(R)32-bitC/C++OptimizingCompilerVersion15.00.30729.01for80x86Copyright(C)MicrosoftCorporation.Allrightsreserved.t.cppt.cp