使用c++;指针? 我的C++知识有限,希望你能帮助我:< /P>

使用c++;指针? 我的C++知识有限,希望你能帮助我:< /P>,c++,optimization,pointers,recursion,C++,Optimization,Pointers,Recursion,我有一个这样的治疗方法: std::string content; std::string pathDir; void Recurcive(std::string &url) { content = getContent(url); url = findOneUrl(content); pathDir = getPathDir(url); //etc.. Recurcive(url); } 优化方法代码中使用的参数的最佳实践是什么?我应该

我有一个这样的治疗方法:

std::string content;
std::string pathDir;

void Recurcive(std::string &url)
{

    content = getContent(url);
    url = findOneUrl(content);
    pathDir = getPathDir(url);
    //etc..

    Recurcive(url);

}

优化方法代码中使用的参数的最佳实践是什么?我应该为内容、newUrl、pathDir使用指针吗?有无指针的区别是什么?

这里的第一点是包含std名称空间,如下所示

using namespace std;
在此之后,您可以直接使用string而不是std::string
在将参数/参数传递给函数时,请回答您的问题,使用引用变量,因为没有参数的副本,因此它会比指针更快,引用也更安全。

传递参数有三种方法:通过值通过指针,和通过引用

按值计算: 将创建参数的新副本。对于像
std::string
这样的大对象,这可能会很昂贵。对于像
int
这样的小事情,这并不重要

void myFunc(std::string str) { ... }
std::string mySuperLongString = getSuperLongString()
myFunc(mySuperLongString) // will make a copy of the long string. Expensive.
带有指针的: 当传递指针时,您只是传递一段数据的地址。实际上,指针是按值传递的,但因为您只是传递一个地址,所以这是一个轻松的操作

void myFunc(std::string *str) { ... }
std::string mySuperLongString = getSuperLongString()
myFunc(&mySuperLongString) // Pass the address of the string. Light operation
带参考文件: 它与使用指针非常相似,只是有一些额外的安全检查。例如,分配一次引用后,不能重新分配引用,可以将引用视为正在处理的对象的另一个名称(即,不需要像指针一样使用取消引用运算符
*
->
)。使用引用和使用指针一样轻量级,但更安全。这是传递参数C++的首选方法。
void myFunc(std::string& str) { ... }
std::string mySuperLongString = getSuperLongString()
myFunc(mySuperLongString) // Pass a reference to the string. Light operation

指针不是“更快”开关。当需要的行为与指针提供的行为相匹配时,应该使用指针。“优化”与它无关你在构建一个网络蜘蛛吗?如果这样,不管使用指针,递归可能不是最好的方法。“使用C++指针的最佳方法”——也许最好的办法是根本不用它们,除非你需要指针。然后你会非常小心地使用它们(并仔细研究智能指针)。谢谢jalf,所以这种方法是好方法?好吧,你在使用指针!通过引用传递(即std::string和url)您正在传递指向url字符串对象的指针。处理“常规”指针和“按引用”指针的不同之处在于是否使用。或者->操作符。此外,您不能有空引用。简而言之,您不能以比指针更快的方式向函数传递信息。我们讨论的是一些指令——可能是10个,也可能是20个CPU周期。这是每秒发生的20亿或30亿次中的20次。寻找其他优化!使用
名称空间std
从来都不是好建议。感谢您提供的信息!)