草庐IT

弱引用

全部标签

c++ - 关于在 C++ 中返回 const 引用

我对在C++中返回const引用感到困惑。所以我在下面编写代码块并在gnuc++和visualstudio上进行测试。并找到不同的答案。谁能说出在C++中使用returnconst引用的好处以及在不同编译器上导致不同行为的原因。#includeusingnamespacestd;classA{public:A(intnum1,intnum2):m_num1(num1),m_num2(num2){coutm_num1*rhs.m_num1,this->m_num2*rhs.m_num1);}A(constA&rhs){this->m_num1=rhs.m_num1;this->m_num

c++ - 右值引用和构造函数参数

让我们考虑一个简单的类templateclassWrapper{public://Constructors?private:Twrapped;};它应该使用什么构造函数才能有效?在C++0x之前,会有一个构造函数接受:常量引用(Tconst&)-如果类型T是“重”,或值(T)-如果类型T是“光”。判断是否输入T是“重”还是“轻”并不容易。可以假设只有内置类型(整数/float/...)是“轻量级”的。但这并不完全正确,因为我们自己的Wrapper很可能也应被视为“轻型”类型。类似boost::call_traits的库通过允许类型创建者将类型标记为“light”(通过提供适当的call

c++ - 方法结果按值声明,按引用实现有效吗?

我一直在想,如果我通过引用从方法中返回一些东西,而该方法实际上被声明为按值返回,那么它是否是有效的c++:classA{public:intmethod(){inti=123;int&iref=i;returniref;}};这可以很好地编译并且似乎可以工作。据我了解,这应该按方法签名中声明的值返回。我不想最终返回对局部变量的引用。有谁知道这是否是没有陷阱的“正确的C++代码”? 最佳答案 这是一个完全有效的C++代码,并且完全符合您的预期:有一个本地变量拥有对该局部变量的局部引用复制本地引用引用的变量将该拷贝返回给调用者(展开堆栈

c++ - 未定义对析构函数的引用

我已经用C++编写了一些代码,但是当我尝试编译时,出现了一个非常奇怪的错误,这是我不应该出现的。这是我的代码:#includeusingnamespacestd;#include"articles.h"intmain(){//CréationdesarticlesconstStylos1("s1","Stylojade","Watertruc",500,"Noir");constRametter1("r1","Ramettehautequalité","Clairefont",95,80);//Créationdeslots(10%deréduction)constLotl1("l1"

c++ - 条件运算符可以返回引用吗?

我遇到了一行代码,但从未想过它会运行良好。我认为条件运算符的返回值不适用于引用。一些伪代码:#includeusingnamespacestd;classA{public:A(intinput):v(input){};voidprint()const{cout谁能解释一下?谢谢。 最佳答案 您对条件运算符的假设是错误的。表达式的类型是表达式c.getA()和c.getB()具有的任何类型,如果它们具有相同的类型,并且如果它们表示左值,那么整个表达式也是如此。(具体规则在C++标准的§5.16中。)你甚至可以这样做:(conditio

c++ - 初始化结构包含对结构的引用

是否可以有一个结构包含对结构的引用。这些是如何初始化的?请参阅下面的简短示例。谢谢typedefstruct{inta;}typeInner1;typedefstruct{intb;}typeInner2;typedefstruct{typeInner1&one;typeInner2&two;}typeOuter;voidfun2(typeOuter*p){p->one.a=2;p->two.b=3;}voidfun(typeInner1&arg1,typeInner2&arg2){typeOuter*ptr=newtypeOuter;//好的,感谢所有的输入。我还必须修改typeOu

c++ - 将右值作为非常量引用传递(VS 警告 C4239)

我想做的(使用C++lambda)是有效的:std::vectorGetTheArray(){returnsomething;}constautoDoSomething=[](std::vector&array){//Someprocessingthatinvolveseithersortingthe'array'orsettingtemporaryflagsontheitems};DoSomething(GetTheArray());这在标准C++中似乎是不允许的,因为右值不能作为非常量引用传递。我的问题:1)有没有办法使用类型转换来做到这一点,或者我是否必须创建一个临时变量来存储G

c++ - 无法分配给重载的取消引用 (*) 运算符

我为我的模板类重载了取消引用运算符:templateclassNode{public:T*pointer;Toperator*(){return*pointer;}};我希望能够写入main中的指针:Noden;*n=33;但是我得到这个错误:lvaluerequiredasleftoperandofassignment我应该如何重载此运算符才能写入指针? 最佳答案 只要给它T&作为返回类型。然后你有一个左值。现在的问题是您要返回指向的对象的拷贝。 关于c++-无法分配给重载的取消引用(

c++ - 何时通过引用传递和返回 C++ 中的函数

首先,我用C++创建了一个复杂的类,它有两个成员数据——实数和虚数。(形式为a+ib)。当我尝试为复杂类对象重载friendostreamoperator在.cpp文件中,它不起作用,而是打开一个ios_base文件并在那里显示错误。但是当我按引用传递并按引用返回时,相同的代码完美地重载了ostream&operator我不明白通过引用传递和返回有什么帮助? 最佳答案 std::ostream是not-copyabletype类型。您不能复制o,因此您必须通过引用接收它并通过引用返回它。

c++ - 引用计数(不存储任何数据)

我需要在我的类(class)中有一个共享计数器(当计数器归零时调用一些函数)。我可以使用shared_ptr有一个删除器,但这种方法有分配不需要的char的开销并保持指向它的指针。基本上,我需要shared_ptr的引用计数部分.我不知道如何利用shared_ptr并避免这种开销。是否有共享计数器的可移植C++11实现(即,仅使用标准c++11和std,没有显式互斥锁等)?附言。Counter不是整个类(class)独有的。我可能有我类(class)的对象a1、a2、a3共享同一个计数器。而b1、b2、b3共享不同的计数器。因此,当a1、a2、a3中的最后一个超出范围时,应该发生一些事