草庐IT

Pointers

全部标签

c++ - 在 C++ 模板函数中,我可以返回取消引用的参数类型吗?

我的意思是下面的。我想要一个模板函数,它采用两个vector迭代器(或两个指向double组的指针)并返回一个与我传递的vector迭代器或数组指针有某种关联的double。但是,我希望它适用于double或int,或任何算术类型。我想我不能说:templateT*func(TBegin,TEnd)Tnew_variable=Begin+5;return(*new_variable);}因为编译器不会理解T*的含义。我想到的一个解决方案是将我要返回的内容作为第三个参数:templatevoidfunc(TBegin,TEnd,T*new_variable)new_variable=Be

c++ - 指针运算符的正式名称

在指针上下文中,运算符*和&的正式名称是什么?它们似乎经常分别被称为解引用运算符和寻址运算符,但不幸的是,标准中关于一元运算符的部分没有命名它们。我真的不想再命名&address-of了,因为&返回一个指针,而不是地址。(见下文)标准对此非常明确:Theresultoftheunary&operatorisapointertoitsoperand.Symmetry建议命名为&referenceoperator这有点不幸,因为它与C++中的引用发生冲突。&返回一个指针这一事实表明指针运算符。是否有任何官方消息来源可以证实这些(或其他)命名?指针与地址指针是一种语言机制,而地址是一种实现细

c++ - 指向模板类成员函数的函数指针? (C++)

在我一直在做的作业中,我一直在努力解决这个问题,但似乎根本无法解决这个问题。我写了一个小测试类来演示我正在尝试做什么,希望有人能解释我需要做什么。//Testerclass#includeusingnamespacestd;templateclassTester{typedefvoid(Tester::*FcnPtr)(T);private:Tdata;voiddisplayThrice(T);voiddoFcn(FcnPtrfcn);public:Tester(Titem=3);voidfunction();};templateinlineTester::Tester(Titem):

c++ - C++中某些类型的指针之间的距离有什么限制?

假设我有两个指向T类型的指针:T*first=...//whateverT*second=...//whateverelse我能否确定这两个指针之间的距离永远不会超过:((size_t)(-1))/sizeof(T)? 最佳答案 您只能计算两个指针之间的距离(一个指针减去另一个指针),前提是两个指针都指向同一个数组中的元素,或者指向同一个数组的尾数。如果两个指针满足那个约束,那么是的,两个指针之间的差的绝对值不能超过((size_t)(-1))/sizeof(T)因为size_t必须足够宽以表示任何对象的字节大小。如果两个指针不满足

c++ - 以下代码是否容易出现内存泄漏?

我是C++的新手,我想知道下面的代码是否容易出现内存泄漏。在这里,我使用std::ostream指针将输出重定向到控制台或文件。为此,我为std::ofstream调用了新的运算符。#include#includeintmain(){boolbDump;std::cout>bDump;std::ostream*osPtr;if(bDump){osPtr=newstd::ofstream("dump.txt");}else{osPtr=&std::cout;}*osPtr还有一件事,我没有关闭在为ofstream调用构造函数时打开的文件。我们这里是否有任何潜在的数据丢失情况。因为文件没有

c++ - 构造函数中指针的默认值是什么意思?

我试着理解这段代码(取自here):templateclassauto_ptr{T*ptr;public:explicitauto_ptr(T*p=0):ptr(p){}~auto_ptr(){deleteptr;}T&operator*(){return*ptr;}T*operator->(){returnptr;}//...};我无法理解这行代码:explicitauto_ptr(T*p=0):ptr(p){}。据我所知,在这一行中,我们尝试定义一个构造函数,该构造函数具有一个pointer-to-object-of-T-class类型的参数。然后我们有=0。那是什么?它是默认值吗

c++ - 访问类中的结构成员

我有一个.hpp和.cpp文件。我想访问一个类中结构中的变量,该变量恰好位于.cpp文件中的header.hpp文件中。在.hpp中,我有classfoo{public:structpacket{intx;u_inty;};};foo(constchar*name):m_name(name){}在.cpp中我做了:foo*foo_1=&foo;printf("Thevalueofxis:%d",foo_1->packet.x);printf("Thevalueofyis:%u",foo_1->packet.y);执行此操作时,我收到以下错误:code_1.cpp:117:error:e

c++ - 在 while 循环中递增 *char 的指针

这是我的:char*input=newchar[input_max]char*inputPtr=iput;我想使用inputPtr来遍历输入数组。但是我不确定什么能正确检查我是否已经到达字符串的末尾:while(*inputPtr++){//Somecode}或while(*inputPtr!='\0'){inputPtr++;//Somecode}还是更优雅的选择? 最佳答案 假设输入字符串以null结尾:for(char*inputPtr=input;*inputPtr;++inputPtr){//somecode}请记住,您发

c++ - 比较 std::vector 的指针来检查相等性是否安全?

一次,我创建了一个指向std::vector的指针,然后我做了一些push_back、reserve、resize对该vector的操作,在这样的操作之后,将指针与该vector的地址进行比较以检查指针是否指向该vector是否安全,因为可能会重新分配内存。例如std::vectorvec;vector*pVec=&vec;vec.reserve(10000);assert(pVec==&vec);vec=anotherVec;assert(pVec==&vec);此外,将指针与vector的第一个值进行比较是否安全?例如:std::vectorvec(1,0);int*p=&vec[

c++ - 如何将 unique_ptr 移动到原始指针?

我有一个函数,用于分配给定大小的缓冲区。缓冲区将在返回前预处理/填充一些数据。此预处理可能会返回false以表示此缓冲区未正确处理。所以我想在这个缓冲区上应用RAII以避免在没有delete[]的情况下提前返回通常我使用unique_ptr帮助我自动释放本地分配的对象。在这种情况下,我需要返回这个分配的对象(由unique_ptr拥有)并将所有权转移给调用者。但是编译器提示我无法转换unique_ptr至T*而我std::moveunique_ptr.看起来像unique_ptr只能移动到另一个unique_ptr而不是原始指针。有什么方法可以从unique_ptr转移所有权吗?到ra