草庐IT

弱引用

全部标签

C++ 引用和 C 指针

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:WhatarethedifferencesbetweenpointervariableandreferencevariableinC++?我开始研究C中的指针(无论如何都是基础知识)并开始阅读C++。我正在阅读的这本书会直接跳转到引用文献,而在索引中查找直到后来才看到指针。在C中,我想如果我想做一个按引用传递的函数,我将不得不使用指针作为参数,例如voidswapAandB(int*A,int*B){//dosomething}但是C++书决定将对原始变量的引用放入函数中。例如voidswapAandB(in

c++ - 为什么 const 模板化引用类型不同于 const 引用类型?

考虑这个模板:templateclassfoo{typedefconstRefTconst_ref_t;typedefconstT&another_const_ref_t;//...};我假设类型const_ref_t和another_const_ref_t将是等效的。两者都是constT&的。但他们不是。唉,下面对它们不等价的证明是相当详尽的。它取决于使用dynamic_cast检查另一个类的类型。classabstractBase{public:virtual~abstractBase(){}};templateclassotherClass:publicabstractBase{

c++ - 将异常对象引用传递给新的异常对象是否安全?

假设如下:structwrapper_exception{std::runtime_error&err;wrapper_exception(std::runtime_error&_e):err(e){}};try{throwstd::runtime_error("foo");}catch(std::runtime_error&err){throwwrapper_exception(err);}问题:wrapper_exception处理后访问runtime_error内部的引用是否安全? 最佳答案 我很想说这是未定义的行为。标准反复

c++ - 我的 C++ 类必须是 Windows 8 Metro 风格应用程序中的引用类吗?

我知道,如果我想将我的C++代码作为WinRT组件共享给.Net和JavaScript代码,我必须将我的类声明为publicrefMyClasssealed。但是,如果我有一个我只想在我的应用程序中使用的类,它是否需要是一个ref类?假设我有一个简单的建筑类。是否可以定义如下#pragmaonceclassBuilding{public:Building(intcap);~Building(void);intget_capacity(){returncapacity;}private:intcapacity;};然后像这样使用std::shared_ptrbldg=std::make_

c++ - 通过模板化引用传递 C++11 lambda

在gcc4.5中,使用-std=c++0x,以下代码可以按预期编译和工作,#includetemplatevoidcaller(Hh){h();}intmain(){autoc=[](){printf("A\n");};caller(c);caller([](){printf("B\n");});return0;}打印,AB但是,如果caller被定义为引用,templatevoidcaller(H&h){h();}编译器提示,test.cpp:Infunction‘intmain()’:test.cpp:61:34:error:nomatchingfunctionforcallto‘

c++ - 从 std::tuple 成员中移除引用

我在STL元组的帮助下实现了一些变量的保存/恢复功能,如下所示:doublea=1,b=2;intc=3;autotupleRef=std::make_tuple(std::ref(a),std::ref(b),std::ref(c));//hereI'msavingcurrentstateofa,b,cstd::tuplesaved=tupleRef;//heregoesblockofcode,wherea,b,andcgetspoiled......................////nowI'mrestoringinitialstateofa,b,ctupleRef=save

【C++】引用详解

目录概念引用特性常引用 使用场景传值、传引用效率比较引用和指针的区别概念引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。比如:宋江,外号“及时雨”。类型&引用变量名(对象名)=引用实体;intmain(){inta=10;int&ra=a;//注意:引用类型必须和引用实体是同种类型的引用特性引用在定义时必须初始化//引用必须初始化int&b;/*错误(活动) E0252 引用变量"b"需要初始值设定项 */一个变量可以有多个引用intmain(){inta=10;int&ra=a;//引用一旦引用一个实体,再不能引用其

c++ 关于按引用返回值的谜题

setfoo{seta;//operationonareturna;}如果我这样做会有任何性能差异吗:set&foo{seta;//opsonareturna;}如果是这样,我的理解是a将在堆栈上分配。foo()返回后,内存空间将被回收。我们如何引用已声明的内存? 最佳答案 在情况B中,对返回值的任何实际使用都会导致未定义的行为。您不得通过引用返回局部自动变量并期望任何人都能够访问它。查看此liveworkspace警告信息。当您执行此类操作时,您的编译器通常会警告您,但并不总是建议依赖它。请注意,在C++11中,第一个示例非常高效

c++ - 如何在 C++ 中引用双重模板化的自由函数

我有一个模板类,我在其中定义了引用该模板类的自由函数。这些免费功能也以不同的参数为模板。我可以从类之外调用自由函数。但是,我找不到一个自由函数调用另一个函数的正确语法。简单示例:templateclassFoo{templatefriendSf(constFoo&){returnS();}templatefriendSg(constFoo&s){returnf(s);//Seebelow,wheninstantiated,yields'nomatchingfunctionforcalltof(constFoo&)'}};floattest1(){Fooo;returnf(o);//Co

c++ - 当模板类型是基本类型时通过引用传递的成本

我一直听说确保最佳性能的良好做法是:按值传递基本类型(int、double...)通过const引用传递类如今,在编译器下使用C++11和完全优化,当通过const引用传递基本类型时是否会产生开销?此外,当T为int时,将执行以下功能:templateinlinevoidf(constT&x);慢于:templateinlinevoidf(constTx); 最佳答案 如果编译器真的内联代码(这对于简单模板很常见),则不会有任何区别。当无法内联函数并调用外联定义时,问题就很明显了。在那种情况下,传递引用可能会在访问变量时涉及额外的取