草庐IT

$双指针

全部标签

c++ - 非指针函数类型可以是非类型参数吗?

我一直在试验C++中的函数类型。请注意,我指的不是像这样的指向函数的指针类型:typedefvoid(*voidFuncPtr)();但更具异国情调的是:typedefvoid(voidFunc)();我没想到下面的代码可以编译,但令人惊讶的是:templateclassfuncClass{public:voidcall(){func();};};voidfunc(){}voidTest(){funcClassfoobar;foobar.call();}但是,如果我尝试将以下内容添加到funcClass:voidFuncPtrget(){return&func;}我收到错误Addres

c++ - 在 C++ 中创建一个标准的指针队列

假设我有一个整数队列,#include#includeusingnamespacestd;intmain(){intfirstValToBePushed=1;queueCheckoutLine;CheckoutLine.push(firstValeToBePushed);cout我如何使用一个队列来做本质上相同的事情,该队列包含指向整数的指针,而不是像上面目前所做的那样。我计划制作一个循环以生成多个值,但这只是一个更简单的示例。谢谢, 最佳答案 如果这是生命周期管理,那么:std::queue>CheckoutLine;Checko

c++ - 我是否负责在 QImage::bits() 函数提供的指针上调用 delete?

Qt类QImage有两个版本的bits()函数,返回指向底层图像数据的指针。一个是const,另一个不是。这是thedocumentation对于非常量版本:Returnsapointertothefirstpixeldata.ThisisequivalenttoscanLine(0).NotethatQImageusesimplicitdatasharing.Thisfunctionperformsadeepcopyofthesharedpixeldata,thusensuringthatthisQImageistheonlyoneusingthecurrentreturnvalue

c++ - 拥有一个具有原始指针访问器的 unique_ptr 成员是不好的做法吗?

我有一个类有一个unique_ptr成员,并且这个类保留这个对象的唯一所有权。但是,外部类可能需要访问此对象。在这种情况下,我应该只返回一个原始指针吗?shared_ptr似乎不正确,因为这意味着访问类现在共享该内存的所有权,而我想明确指出原始类是唯一所有者。例如,也许我有一个拥有根节点的树类。另一个类可能出于某种原因希望探索树,并且需要指向根节点的指针来执行此操作。部分实现可能如下所示:classTree{public:Node*GetRoot(){returnm_root.Get();}private:std::unique_ptrm_root;};这是不好的做法吗?更好的解决方案

c++ - 如何编写可以处理对象或指针函数调用的模板函数?

我希望能够编写一个模板函数,该函数可以对容器的所有元素调用函数。我们可以假设函数名总是相同的。然而,不知道的是容器中存放的是对象还是指针。即,我是否应该取消引用。templatevoidProcessKeyedContainer(TContainer&keyedContainer){for(autoit=keyedContainer.begin();it!=keyedContainer.end();++it){//dosomerandomstuffhere.//...autovalue=it->second;value.Process();//orvalue->Process()ift

c++ - 使用两个不同的构造函数初始化指向数组的指针

我有一个程序,我想在其中使用指针初始化一个类对象数组。classxyz{};cin>>M;xyz*a=newxyz[M];//thiswillcalltheconstructorforeachobject.问题是我在xyz类中有两个构造函数。我想使用其他构造函数初始化最后两个元素,而不是没有参数的默认构造函数。我该怎么做?我希望第M+1和第M+2项由接受参数的不同构造函数初始化。 最佳答案 std::vectora(M-2);a.push_back(xyz(...));//xyz(...)hereisacalltothea.push

c++ - 迭代中的指针算法是否溢出安全?

即使在较新的C++代码中,我也经常看到使用普通指针算法进行数组迭代。我想知道它们到底有多安全,使用它们是否是个好主意。考虑这个片段(如果你用calloc代替new,它也会在C中编译):int8_t*buffer=newint8_t[16];for(int8_t*p=buffer;p当buffer发生分配到地址0xFFFFFFF0时,这种迭代不会导致溢出并完全跳过循环吗(在32位地址空间中)或0xFFFFFFFFFFFFFFFF0(64位)?据我所知,这是一种非常不幸但仍有可能出现的情况。 最佳答案 这是安全的。C和C++标准明确允许

c++ - 如何将 C++ 函数指针(非静态成员函数)传递给预定义的 C 函数?

我正在考虑使用来自http://users.ics.forth.gr/~lourakis/levmar/的库,这是用C语言编写的。但是我将它包含在一个成员函数“dlevmar_der”中,它期望两个函数指针作为它的参数:intdlevmar_der(void(*func)(double*p,double*hx,intm,intn,void*adata),void(*jacf)(double*p,double*j,intm,intn,void*adata),double*p,/*I/O:initialparameterestimates.Onoutputcontainstheestima

c++ - 方法接受函数指针的可变参数模板

下面的代码在我看来应该可以正常工作,但它产生了C2738:couldnotdeducetemplateargumentfor'Type'.在VS2013中。templateuintGetParameterSize(ReturnType(*method)(Args...)){returnParameterSize();}templateuintParameterSize(){uintoutput=sizeof(Type);if(sizeof...(Remaining)>0){output+=ParameterSize();}returnoutput;}voidMyMethod3(inta

c++ - 通过这样的 const 指针修改非常量指针是否合法?

考虑以下函数:voidf(intconst*p){*const_cast(id(p))=0;}假设f总是得到一个int*作为参数,这是合法的吗?我不是在问这是否是一件好事,我只是想要一个严格正式的答案。让我有点担心的是,如果你能做到这一点,优化器就会更难利用常量。考虑一个更复杂的例子://identity,alwaysreturnswhatitgetsuintptr_tid(uintptr_tp){staticunsignedintconstar[5]{0x12345678,0x87654321,0x02468ACE,0xECA86420,0x88888888};for(size_ti