草庐IT

弱引用

全部标签

C++ operator= 返回对 *this 的引用

看下面的代码:#includeusingnamespacestd;classWidet{public:Widet(intval=0):value(val){}Widet&operator=(Widet&rhs){value=rhs.value;return*this;}intgetValue(){returnvalue;}private:intvalue;};intmain(){Widetobj1(1);Widetobj2(2);Widetobj3(0);(obj3=obj2)=obj1;cout代码运行成功,输出为(使用VS2008):当我让operator=返回一个值而不是引用时:

c++ - 如何决定 constexpr 是否返回引用

如果您有一个函数,ifconstexpr()决定做一件事或另一件事,如何在一种情况下返回左值而在另一种情况下返回右值?以下示例在第一个用法行中未编译,因为返回类型auto不是引用:staticintnumber=15;templateautoget_number(intsometemporary){ifconstexpr(getref){returnnumber;//wewanttoreturnareferencehere}else{(...)//dosomecalculationswith`sometemporary`returnsometemporary;}}voiduse(){i

C++ 指针之间的取消引用

假设我有一个类FooclassFoo{}我做以下作业:Foo*ptrFoo=newFoo();Foo&ref=*(ptrFoo);//question1Fooafoo=*(ptrFoo);//quesion2我的问题:1)当分配给“&ref”时,在内存方面内部发生了什么?它只是将“ptrFoo”的内存地址分配给“ref”吗?2)当分配给“afoo”时,发生了什么?它是否调用复制构造函数?这意味着为两个Foo对象分配了内存?即,“afoo”和之前为“ptrFoo”分配的内存?3)假设我有一个名为“voidmethodBar(constFoo&instance)”的方法如果我将“ptrFo

c++ - 为什么 operator<< 的重载必须通过引用返回?

我想打印出一个用户定义类型的对象,像这样cout所以我想重载operatoriosfwd和ios_base.hostreamoperator1)是不是因为不能创建新的ostream对象,所以要按引用返回?但是当我像这样通过引用返回时:ostream&operator它工作正常。2)有什么解释吗? 最佳答案 在第一个示例中,您返回了不允许的流对象拷贝,因为C++中所有流类的复制构造函数(以及复制赋值)已被禁用让他们制作private.由于您无法制作流对象的拷贝,因此您需要通过引用返回它,这是您在第二个示例中所做的,这就是它工作正常的原

c++ - 通过引用传递 char 数组

我正在通过引用传递一个char数组,但是当我从函数返回并打印该数组时,它什么也不显示。我做错了什么?#includeusingnamespacestd;voidfunc(char[]);intmain(){chara[100];func(a);cout问候 最佳答案 你可能会做的是:voidfunc(char(&array)[10]){}转换为:通过引用传递10([10])个字符(char)的数组([..])((&..)). 关于c++-通过引用传递char数组,我们在StackOver

c++ - 我们应该将 COM 中的 BSTR 类型视为值还是引用?

从ATLInternals一书中,我知道BSTR不同于OLECHAR*,BSTR有CComBSTR和CString。根据MSDNAllocatingandReleasingMemoryforaBSTR,我知道调用者/被调用者的内存管理责任。从MSDN中获取这一行,HRESULTCMyWebBrowser::put_StatusText(BSTRbstr)我仍然不知道如何在我的实现中正确处理bstr。因为我仍然有一个关于BSTR的基本问题——我们应该将bstr视为一个值(如int)还是一个引用(如int*),至少在COM接口(interface)边界上。我想在我的实现中尽快将BSTR转换

C++ 引用和返回值

我遇到了以下代码:classMyClass{//variousstuffincluding...double*myarray;double&operator()(constintn){returnmyarray[n];}doubleoperator()(constintn)const{returnmyarray[n];}//variousotherstuff...}那么“()”的这两个重载的实际区别是什么?我的意思是,我知道“第一个返回对double的引用,第二个返回double”,但这实际上意味着什么?我什么时候用一个,什么时候用另一个?第二个(返回double)似乎非常安全和直接。

c++ - 为什么重载赋值运算符会返回对类的引用?

classitem{public:item&operator=(constitem&rh){......return*this;}};下面的签名有错吗?voidoperator=(constitem&rh);itema,b;a=b;//equivalenttoa.operator=(b);sothereisnoneedtoreturnthis. 最佳答案 这不是“错误”,而是令人惊讶。赋值计算为目标对象。这就是内置的含义。如果您为自己的类(class)定义不同,人们可能会感到困惑。例子:intc;while((c=getchar()

c++ - poco c++ 静态链接问题与 undefined symbol 引用

我正在尝试像这样链接到POCOC++库的静态版本:g++BCCMain.o-L$_POCO_LIBS-Wl,-Bstatic$_POCO_LIBS/libPocoFoundation.a$_POCO_LIBS/libPocoUtil.a$_POCO_LIBS/libPocoXML.a$_POCO_LIBS/libPocoJSON.a-Wl,-Bdynamic-oBCMain不幸的是,这会导致一些undefinedsymbol引用错误,例如:Poco::Logger::get(std::basic_string,std::allocator>const&)即使Poco::Logger::

c++ - 重载 const 和 volatile - 为什么它通过引用工作?

我有代码:#include"stdafx.h"#includeusingnamespacestd;voidfunc(constint&a){std::cout以上代码显示了基于参数是否为const/volatile的重载。但是,如果我将参数从int&更改为int,代码将不再编译并且我无法基于const/volatile参数类型进行重载。我不明白为什么如果int通过引用传递,我们可以基于const和volatile进行重载,但如果它通过值传递则不能?编辑我应该强调我理解引用的作用-我不明白为什么允许引用别名在const上重载但普通的int不允许。 最佳答案