草庐IT

弱引用

全部标签

c++ - 使用对(成员)函数返回的对象的引用是否安全甚至可能?

我有一个类存储了一堆可以在整个程序中更改的值和一个成员函数,它根据这些值计算并返回一个矩阵。我还有一个函数需要一个指向此类矩阵的第一个float的const指针。我不想在某处手动创建本地矩阵。相反,我想同时更新并将其直接从类传递给所述函数。所以,而不是这个:glm::mat4matrix=myClass.calculateMatrix();functionThatneedsMatrix(&matrix[0][0]);我可以这样做吗?functionThatneedsMatrix(&myClass.calculateMatrix()[0][0]);如果是,该矩阵的范围是什么?

c++ - 模板类中引用的引用类型是什么

这个问题在这里已经有了答案:Conciseexplanationofreferencecollapsingrulesrequested:(1)A&&->A&,(2)A&&&->A&,(3)A&&&->A&,and(4)A&&&&->A&&(2个答案)关闭3年前。在下面的代码中,a和b的类型是什么?templatestructA{T&a;Tb;};intmain(){inti=1;Aa{i,i};return1;}我使用了这篇文章中的代码,它可以给出变量的类型。->post但是,它说这两种类型都是iconst&。intmain(){inti=1;Aa{i,i};std::cout()()

C++和const reference to temporary binding问题(在C++0X中实现D语言传值传引用规则)

我想知道可以在多大程度上模仿C++中按值传递和按引用传递规则的D语言规则。有关背景,请参阅以下两个引用资料(主要是Alexandrescu):http://bartoszmilewski.wordpress.com/category/d-programming-language/page/2/和http://groups.google.com/group/comp.std.c++/msg/303e3bf2407a7609?其中一个关键区别是,在D中,const引用不绑定(bind)(作为非const引用)到临时对象。但是,我不知道有什么方法可以定义泛型类X,从而导致以下代码无法编译:v

c++ - 取消引用指针(并返回它)的问题

这里我有一个函数,它创建一个字符串,将它分配给一个字符串指针,然后返回它。我尝试返回一个常规字符串,但效果很好。但是当我整合指针并取消引用它们时,我的程序崩溃了。当我尝试调试它时,这是我收到的消息:Assignment2.exe中0x00024cbf处的未处理异常:0xC0000005:读取位置0xcccccce4的访问冲突。这是我的代码:string*Recipe::getCookingTime()//@intput:none//@output:cookingtimeasastring{stringtemp;stringdisplayHrs;stringdisplayMins;if(

c++ - 右值引用模板推导

templatevoidf(U&&v){std::cout::value){std::cout(int(1));}}intmain(){f(int(1));f(int(1));std::cin.ignore();}为什么v参数被解释为int当我没有明确使用f时?有什么不同?(用MVS2010编译)我的猜测是,First作为右值传递,second作为右值引用传递,并且都正确绑定(bind)到右值引用,对吗?谢谢。 最佳答案 不,不是真的。永远不会推导出右值引用。U&&的概念U是可推导的模板参数,用于指示U应该被推导,使得参数的右值是保

c++ - 非法引用非静态成员...typedef?

为什么会这样ErrorC2597:Illegalreferencetonon-staticmember'derived>::T'当我尝试在VisualC++2010x64中编译此代码时?(在x86上似乎没问题……哪一个是正确的?)structbase{typedefintT;};templatestructderived:base{usingbase::T;derived(T=T()){}};intmain(){derived();return0;} 最佳答案 正如Praetorian的评论所提到的,问题在于T()默认值。根据错误详

c++ - std::initializer_list<> 和一个引用参数

我刚开始使用初始化列表,我想知道它们的工作方式是否与其他STL容器相似。我的意思是他们复制值(value)观吗?我想做的是一个简单的min()函数,如下所示:templateT&minArgs(conststd::initializer_list&Arguments){constT*Smallest=Arguments.begin();for(constT*I=begin(Arguments);I!=end(Arguments);++I){if(*I然而,当我调用函数时,我从GCC得到了这个:error:'const'qualifierscannotbeappliedto'int&'我

c++ boost序列化类相互引用

我是C++boost的新手,所以这个问题可能很基础:如何序列化两个用指针相互引用的类。例如:classA;classB;classA{public:...private:doublea;vectorb;}classB{public:...private:intb;lista;}A类有一个包含指针B*的私有(private)vector,而B类有一个包含A*的私有(private)列表。特别是通过反序列化会有问题(指针!)。有人知道吗? 最佳答案 Boost.Serialization将很好地处理指针的循环引用,感谢objecttra

c++ - 如何从纯抽象基类引用创建对象拷贝?

我想编写一个适用于特定层次结构中的任何派生类的函数,而不修改抽象类输入参数:classA{public:A(intval):m_i(val){}virtualvoidadd(inti)=0;intm_i;};classB:publicA{public:B(intval):A(val){}B():A(0){}virtualvoidadd(inti){m_i+=i;}};classC:publicA{public:C(intval):A(val){}C():A(0){}virtualvoidadd(inti){m_i+=i*2;}};intf(constA&base_class){//ho

c++ - 指针和引用问题

我正在创建类似于结构列表的东西。在main的开头,我声明了一个空指针。然后我调用insert()函数几次,传递对该指针的引用,以添加新元素。但是,似乎有些不对劲。我无法显示列表的元素,std::cout只是破坏了程序,即使它在没有警告的情况下编译。#includestructnode{node*p,*left,*right;intkey;};voidinsert(node*&root,constintkey){nodenewElement={};newElement.key=key;node*y=NULL;std::coutkey;//thislinewhile(root){if(ke