0

我的c++知识有限,希望你能帮助我:)

我有一个这样的递归方法:

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 使用指针吗?有或没有指针有什么区别?

4

2 回答 2

1

传递参数有三种方式:按值使用指针按引用

按值:将创建参数的新副本。对于像这样的大物体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
于 2012-10-26T16:11:42.927 回答
-5

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

using namespace std;

在此之后,您可以直接使用字符串而不是 std::string 在将参数/参数传递给函数时提出您的问题,使用引用变量,因为没有参数的副本发生,因此它会更快并且引用是也比指针更安全

于 2012-10-26T16:07:22.097 回答