草庐IT

弱引用

全部标签

c++ - 声明对对象和赋值运算符的引用

我觉得这个问题很基础,可以在某个地方提出,但我似乎无法找到答案。假设我有这段代码://classmemberfunctionstd::mapmyMap;conststd::map&bar(){returnmyMap;}voidmyFunc(std::map&foo1){foo1=bar();std::map&foo2=bar();}我的理解是,如果我开始使用foo2,因为foo2是对与bar()返回的实例相同的实例的引用,所以我对foo2所做的任何操作都将反射(reflect)在myMap中。但是foo1呢?foo1是否获得了myMap的拷贝,或者它是否也指向与bar()返回的实例相同

c++ - 临时绑定(bind)到引用参数的默认参数的生命周期是多少?

我认为引用只会将临时对象的生命周期延长到引用本身的生命周期,但以下代码片段的输出似乎自相矛盾:#includestructX{~X(){std::coutLiveexample.输出:Insidef()Insideg()Goodbye,cruelworld!所以看起来临时文件在g()被调用后被销毁了……是什么原因? 最佳答案 标准在§12.2[class.temporary]中的特殊情况下处理此问题:p4Therearetwocontextsinwhichtemporariesaredestroyedatadifferentpoin

c++ - 对指针和 C++ 多态性的引用

有谁知道为什么会出现编译错误?我试过VS2005和Codewarrior:classParent{protected:intm_Var;public:Parent():m_Var(0){}virtual~Parent(){}voidPubFunc();};classChild:publicParent{protected:boolm_Bool;public:Child():m_Bool(false){}virtual~Child(){}voidChildFunc();};voidRemoveObj(Parent*&ppObj){deleteppObj;ppObj=0;}intmain(

C++:非临时 const 引用

我需要编写一个类,其构造函数采用对对象的常量引用并将其存储在本地。为了避免我能预见的最常见错误,我只想接受对非临时性的引用(即:对左值的引用)。我怎样才能编写一个函数,它只接受非临时的常量引用?当然,即使是非临时引用也可能超出范围并因此破坏我的类行为,但我相信通过禁止临时引用我将避免大多数错误。 最佳答案 如果您要存储一个引用并需要在构造函数完成后使用它,构造函数最好采用一个指针:structC{C(constX*p):p_(p){}constX*p_;};这样,几乎可以保证您不会有指向临时对象的指针(除非X做了一些非常愚蠢的事情,

c++ - 如何编写返回引用或值的函数模​​板?

我想编写一个函数模板,根据某些编译时表达式返回一个引用或一个值。到目前为止我尝试过的是这样的:templateauto&&Func(){ifconstexpr(some_compile_time_expression){returnGetReferenceFromSomewhere();}else{returnGetValueFromSomewhere();}}这适用于所有类型的引用,但不适用于值。例如,如果GetValueFromSomewhere返回一个Foo,则编译器将Func的返回类型推断为Foo&&并发出警告我正在返回一个临时地址。有什么方法可以让它工作,还是我必须以某种方式

c++ - 返回对对象 vector 的 const 引用

我有2个与同一问题相关的问题:如何返回对属于某个类的vector的引用?我有这门课:classsys{protected:vectors;public:sys();vector&getS(){returns;}//(1)};(1)应返回vectors的引用。但是,在main()中:main(){sys*my_sys=newsys();vector&t1=my_sys->getS();//(2)vectort2=my_sys->getS();//(3)...}t1是对s的引用(即当t1更改时my_sys.s也更改).t2是s的拷贝(即,当t2更改时,my_sys.s未更改)。为什么第(3

c++ - 为什么返回对字符串文字的引用是对临时对象的引用?

常规字符串字符串字面量具有以下定义:OrdinarystringliteralsandUTF-8stringliteralsarealsoreferredtoasnarrowstringliterals.Anarrowstringliteralhastype“arrayofnconstchar”,wherenisthesizeofthestringasdefinedbelow,andhasstaticstorageduration(3.7).我假设因为它具有静态存储持续时间并且它们通常放置在ROM中,所以如果有对它的悬空引用真的没什么大不了的。以下代码发出警告constchar*con

c++ - 引用和对象切片

我没有随身携带EffectiveC++,这让我非常烦恼,我不得不寻求自己的理智。给定classFoo:publicBar{}voidMyFunc(Bar&_input);如果我传入一个Foo,我是不是在纠结slicing问题还是我避免了? 最佳答案 没问题,因为您传递的是引用。您不是在创建新对象,只是让MyFunc访问原始对象。 关于c++-引用和对象切片,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

c++ - C中的引用是什么?

刚开始学C++,看过引用资料,还没有完全理解。References,正如我所读,是对象的替代名称。为什么要使用它而不是直接访问对象,因为对引用的任何操作都会直接反射(reflect)在对象上......?为什么以及何时使用它们?ist是否像一个常量指针,每次使用时都会引用...?而且,它说double&dr=1;----saysitisanerror(somelavalueneeded)constdouble&cdr=1;----saysitisok.我不太理解..所以请解释为什么会这样......谢谢...:) 最佳答案 Whyu

c++ - 引用指针的函数模板特化

我有一个模板函数:templatevoidfoo(constT&value){bar(value);x=-1;}我想专门针对一组类型:templatevoidfoo(constchar&value){bar(value);x=0;}templatevoidfoo(constunsignedchar&value){bar(value);x=1;}它工作正常。当我编译这个时:templatevoidfoo(constchar*&value){bar(value);x=2;}我得到一个错误:errorC2912:explicitspecialization;'voidfoo(constcha