草庐IT

c++ - 指向 C++ 字符串的指针

在下面的代码中,我在change()函数中使用了一个指向C++字符串的指针。在处理指向字符串的指针时,是否可以使用字符串类的运算符?例如,at()适用于[]运算符,但是有什么方法可以使用[]运算符吗?#include#includeusingnamespacestd;voidchange(string*s){s->at(0)='t';s->at(1)='w';//s->[2]='o';doesnotwork//*s[2]='o';doesnotwork}intmain(intargc,char**argv){strings1="one";change(&s1);cout

c++ - 神秘的 C++ "thing"(函数指针)

此语法在C++中的作用是什么?谁能指出技术术语,以便我查看是否在我的文本中找到任何内容?起初我以为它是一个原型(prototype),但后来=和(*fn)让我失望了......这是我的例子:void(*fn)(int&,int&)=x; 最佳答案 可以改写为typedefvoid(*T)(int&,int&);Tfn=x;第二个语句很明显,它应该已经解决了=x;问题。在第一个语句中,我们将T作为类型void(*)(int&,int&)的同义词,这意味着:指向函数的指针((*…))返回void并采用2个参数:int&、int&。

c++ - 将指针容器转换为智能指针?

是否有一种简洁、通用的方法来转换常规/哑指针的std容器(例如vector):vector例如,boost::shared_ptr?:vector>我想我可以使用vector的范围构造函数来完成它:vectorvec_a;...vector>vec_b(vec_a.begin(),vec_a.end());但是拒绝编译(VisualStudio2008)。编辑:测试代码:voidtest(){vectorvec_a;vector>vec_b(vec_a.begin(),vec_a.end());}编译错误:1>c:\ProgramFiles(x86)\MicrosoftVisualSt

c++ - 为什么有人需要指向指针的指针?

例如,为什么需要char**myVariable;?如果一个指针只是内存中的一个地址,那么如果它是一个指向地址的指针和一个指向字符地址的指针,而不是一个指向一个字符地址的指针,为什么会有什么不同呢?在汇编中不会这样LDRR3,=myVariableLDRR2,=[R3]LDRR1,=[R2]LDRR0,=[R1]单个指针所在的位置LDRR1,=myVariableLDRR0,=[R1]现在R0持有值(value)?显然这种方式更快。 最佳答案 如果您想通过函数修改指针的值,则必须通过引用将指针的地址传递给函数。因此,您将需要指向指针

c++ - 在 C++ 中检查空指针的首选方法是什么?

选项A:if(NULL==pSomethingColumn)//Yes,weuseYodaconditionsif(NULL!=pSomethingColumn)或者if(pSomethingColumn)if(!pSomethingColumn)我也在寻找解释推理的引用资料。我听说有人说从技术上讲,NULL不必定义为0,但是拜托!如果是这样的话,那么傻瓜(我们的应用程序)就会以-2147483648不同的方式崩溃。所以,如果NULL!=0,那么我们就会遇到大问题。请帮我解决一场毫无意义的语法辩论。我并不特别喜欢这两种方式。只是在寻找官方方式。谢谢。附言我们正在使用VisualStud

c++ - shared_ptr 与指针共存

我有一个函数如下voida(shared_ptrval){...}有时候,我想传入一个堆分配的对象shared_ptrv(newX());a(v);其他时候,我想传入一个堆栈分配的对象classC{//doesn'tworkproperlyb/cwhentheshared_ptrdiesitwilltrytodeletex...C(){a(shared_ptr(&x));}Xx;};让函数接受智能指针,同时让智能指针引用堆栈分配对象的最佳方法是什么?或者我应该走Java路线并从堆中分配所有内容? 最佳答案 我只想让函数采用这样的模板

c++ - 指针数组

如何获得指向对象(类)的指针数组?我需要为它们动态分配空间,数组的长度直到运行时才确定。任何人都可以解释并告诉我如何定义它吗?并可能向他们解释它是如何工作的,这真的很好:) 最佳答案 改用std::vector。它旨在根据需要动态调整集合的大小。#include//...std::vectorvec;vec.push_back(my_class_ptr);Class*ptr=vec[0]; 关于c++-指针数组,我们在StackOverflow上找到一个类似的问题:

C++老师告诉我不要用指针

昨天我的老师告诉我不要使用指针,除非我想编写一些非常低级的东西。他说垃圾收集器会为我做所有事情,所以指针基本上是低效和危险的。我很生气,因为我以前听过不同之处。那么什么是对的,什么是错的呢?我应该使用指针吗?如果没有,为什么在没有人使用的情况下还要实现它们? 最佳答案 在C++中使用垃圾收集器需要严格的纪律,而且还需要相当称职的程序员,即使在C++11中增加了对垃圾收集的支持也是如此。所以你的老师可能是别的意思。可能他/她的意思是您应该优先使用标准库容器(如vector和string)和智能指针来处理您必须处理的所有权处理指针。这是

c++ - 如何优化指针间接层

我正在尝试在繁重的计算应用程序中优化这类事情:说我有一个doubled[500][500][500][500];至少从编译器的角度来看,以下是相当昂贵的doubled[x][y][j][k]我想告诉编译器它是连续的内存,以方便计算偏移量。在我的例子中,我有这样的东西:doublen=0;for(inti=0;i所以我试图通过将它放在一个单独的函数中来优化它voidfunc(double***constrestrictdMatrix){/*anddosomecalculationsherel*/}没有太大帮助:(有什么优化建议吗?编辑我无法重写代码使数组成为一维。我必须和这个多维的野兽一

c++ - 我可以通过 for_each <algorithm> 在 C++ 中的指针 vector 上调用 `delete` 吗?

假设我有一个std::vectorobjs(出于性能原因,我的指针不是实际的Objs)。我用obj.push_back(newObj(...));填充它反复。完成后,我必须delete被推回的元素。一种方法是这样做:for(std::vector::iteratorit=objs.begin();it!=objs.end();++it){delete*it;}但是,如果我可以使用for_each我很感兴趣算法做同样的事情:#include...for_each(objs.begin(),objs.end(),delete);你怎么看? 最佳答案