草庐IT

null-propagation-operator

全部标签

c++ - 对 operator+ 和/或 operator+= 使用 move 语义有意义吗?

我想知道在什么情况下在重载operator+和/或operator+=时使用move语义是有意义的。尽管在thisquestion中有解释怎么能做到这一点,我想不通为什么要这样做。让我们考虑运算符+=。如果我只是通过引用传递右侧并在左侧对象上进行适当的更改,则无论如何都没有不必要的拷贝。所以我们回到同一点:在这种情况下move语义是否有益? 最佳答案 是也不是。运算符+=一般来说,move语义不一定对operator+=有帮助,因为您已经在修改左侧参数(this),所以您已经有工作资源大多数时候。不过,作为一种优化,它可能是值得的。

c++ - 解决 operator[] 的不明确重载

我有这门课:classMyClass{public:intoperator[](conststd::string&);conststd::string&operator[](constint&)const;...};但是,如果我调用带有const文字0的第二个运算符,它会非常有用:MyClassmyclass;std::cout我遇到了这个错误:Infunction'intmain()':ambiguousoverloadfor'operator[]'in'myclass[0]'note:candidatesare:note:constintMyClass::operator[](co

c++ - 为什么 =default on operator= 在有 const 成员时编译?

classFoo{public:Foo&operator=(constFoo&)=default;private:constinti=0;};为什么=default在那里被允许?它编译没有错误。我认为=default应该失败,因为它不可能分配给const变量?到底发生了什么? 最佳答案 当无法生成该函数时(就是这种情况),=default会将其生成为=deleted。如果您尝试使用该赋值运算符,您的编译器应该produceanerror. 关于c++-为什么=defaultonopera

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++ - 允许成员为 const,同时仍然支持类上的 operator=

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

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

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

C++:即使被转换的对象不是 NULL,dynamic_cast 也会导致 SEGFAULT。怎么会这样?

假设我有一个类A和一个派生自A的类B。现在,我想使用dynamic_cast(见下文)将constA*(称为“a”)转换为B*。如果“a”真的是B*,那么我得到的对象指针应该没问题。如果“a”不是B*,那么我将得到NULL。constA*a=newB();constB*b=dynamic_cast(a);出于某种原因,dynamic_cast操作会导致SEGFAULT。如果“a”不是NULL,那怎么会发生呢?我想如果有任何转换问题,dynamic_cast会给我一个NULL指针,而不是SEGFAULT。如果我试图访问“b”并且动态转换不成功,我应该只得到一个SEGFAULT,对吗?我什

c++ - 取消引用 NULL 指针是否保证使 C/C++ 中的程序崩溃?

我遇到了这个有线代码,它没有崩溃。#includestructs{char*c;char*c2;};intmain(){structs*p=NULL;printf("%d\n",&(p->c));printf("%d\n",&p->c2);printf("%d\n",&(*p).c2);return0;}输出:044我有几个问题无法回答:在c/c++中NULL指针总是等于0吗?如果0恰好是一个变量的地址会怎样?输出似乎是结构成员的偏移地址。这个是怎么算出来的。我的意思是p->c是c的地址,它不存在,因为p==NULL。如果c的地址不存在,怎么能通过&p->c得到c的地址呢?取消引用NU

c++ - 避免 std::bad_alloc。 new 应该返回一个 NULL 指针

我将一个中型应用程序从C移植到C++。它不会在任何地方处理异常,这一点不应该改变。我(错误!)对C++的理解是(直到我昨天艰难地学习它)(默认)new运算符在出现分配问题时返回NULL指针。然而,直到1993年(左右)才出现这种情况。现在,它抛出一个std::bad_alloc异常。是否可以在不重写所有内容以在每次调用时使用std::nothrow的情况下返回到旧行为? 最佳答案 你可以重载operatornew:#includevoid*operatornew(size_tpAmount)//throw(std::bad_allo

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