草庐IT

弱引用

全部标签

c++ - 通过 constness 从结构传递到它的指针和引用成员

我有一个带有指针的结构。我想这样做,如果一个结构实例是常量,那么它的指针的内容就不能被修改。structFoo{};structBar{Foo/*constgoeshereif`constBar`*/*foo;};voidf(Bar&bar){*bar.foo=Foo();//OK}voidg(constBar&bar){*bar.foo=Foo();//OK-butshouldbeerror}有没有办法将常量从结构传递到它的指针和引用成员? 最佳答案 封装来拯救!只需通过接口(interface)编码访问:structBar{Fo

c++ - 右值引用或转发引用?

我知道对于下面的函数templatevoiddo_something(T&&arg);函数参数是转发引用。但是在下面的情况下它仍然是转发引用还是右值引用?templateclassMyClass{voiddo_something(T&&arg);};我认为它仍然是转发引用,但我不确定。此外,我想知道如果结果不是我想要的,可以做什么来强制执行右值引用或转发引用。 最佳答案 这是一个右值引用。转发引用只能出现在推导的上下文中。这只是一个成员函数,它接受对class模板参数的右值引用。如果要维护函数的模板参数推导,则不能强制转发引用为右值

c++ - 构造函数和函数中的 CPP 引用

我对下面的代码有点困惑。`classsample{public:sample(){}sample(sample&Obj){}};voidfun(sample&Obj){}intmain(){samples(sample());fun(sample());return0;}出现以下错误由于以下错误,编译失败。main.cpp:在函数“intmain()”中:main.cpp:29:19:错误:从类型为“sample”的右值中对类型为“sample&”的非常量引用进行无效初始化fun(sample());我知道将fun中的参数从sample&obj更改为constsample&obj将解决

C++ 引用指针作为改变指针的参数

我最近遇到了*&作为函数中的参数。据我了解,它类似于**。为什么在改变指针的函数中需要它?例如。使用new关键字假设我有一个指针int*a,如果我想执行a=newint;为什么我必须将参数作为“指针引用”传递>在那个函数里面? 最佳答案 如果函数以int*为参数,那么指针本身是按值传递的,这意味着函数内部对指针本身(不是指针对象)的任何修改与原始指针。例如voidfoo(int*a){a=newint;}int*a=nullptr;foo(a);//aisstillnullptrhere如果你把参数类型改成int*&会不一样void

C++ 引用类型作为 Objective-C++ 中的实例变量

C++引用类型作为实例变量在Objective-C++中是被禁止的。我该如何解决这个问题? 最佳答案 您不能明智地使用引用作为实例变量,因为无法初始化实例变量并且无法重新设置引用。替代方法可能是简单地使用(可能是智能的)指针。让您更接近C++类行为的另一种可能性是为您的C++成员使用PIMPL样式的成员:structCppImpl{SomeClass&ref;CppImpl(SomeClass&ref):ref(ref){}};@interfaceA:NSObject{CppImpl*pimpl;}-(id)initWithRef:

c++ - 通过类的 const 引用传递

voidfoo(constClassName&name){...}如何访问类实例名的方法?name.method()无效。然后我尝试了:voidfoo(constClassName&name){ClassNametemp=name;.......}我可以使用temp.method,但是在执行foo之后,原来的名字搞砸了,知道吗?顺便说一句,name的成员变量并没有搞砸,而是类的子类的成员变量搞砸了。 最佳答案 根据您提供的描述,ClassName中的method()似乎是一个非常量方法。如果您尝试在const对象上调用非const方

c++ - 模板参数的引用变量的问题

下面的小例子说明了我的问题:templatestructX{staticvoidxxx(T&x){}staticvoidxxx(T&&x){}};intmain(intargc,char**argv){intx=9;X::xxx(x);//OK.X::xxx(x);//ERROR!return0;}错误信息(海湾合作委员会):error:‘staticvoidX::xxx(T&&)[withT=int&]’cannotbeoverloadederror:with‘staticvoidX::xxx(T&)[withT=int&]’为什么?T=int&--->staticvoidxxx(T

c++ - 未定义对外部类的引用?

在类上使用extern时,它会给我undefinedreference,但是当我创建从该类“静态”调用的函数时,它工作正常。有没有办法不使用静态成员函数就可以做到这一点?我的测试代码:#includeclassMyClass{public:voidprint(){std::clogprint();return0;}错误:main.o:main.cpp:(.text+0x129):undefinedreferenceto`_g_myClass'在实际代码中我遇到了段错误。回溯:ProgramreceivedsignalSIGSEGV,Segmentationfault.0x00465af

c++ - 从 C++ 引用静态库中的 C 函数

我有一个用C编写的静态函数库。假设头文件名为myHeader.h,如下所示:#ifndefMYHEADER_H#defineMYHEADER_Hvoidfunction1();voidfunction2();#endiffunction1和function2没什么特别的。假设它们存在于一个名为impl1.c的文件中,该文件如下所示:#include"myHeader.h"voidfunction1(){//code}voidfunction2(){//morecode}到目前为止提到的所有代码都被编译到一些名为libMyLib.a的静态库中。我宁愿不修改用于构建此库的任何代码。我还有一

C++:为什么转换为指针然后取消引用有效?

这个问题在这里已经有了答案:Whycastapointertoafloatintoapointertoalong,thendereference?(5个答案)关闭4个月前。最近我一直在研究C++中的套接字,我遇到了这个:*(structin_addr*)&serv_addr.sin_addr.s_addr=*(structin_addr*)server->h_addr;虽然这确实做了我想要的,但我对为什么我不能这样做有点困惑:(structin_addr)serv_addr.sin_addr.s_addr=*(structin_addr*)server->h_addr;既然它变成了一个