使用c ++指针的最佳方法是什么?

时间:2012-10-26 15:59:07

标签: c++ optimization pointers recursion

我在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?有没有指针有什么区别?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:-5)

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

using namespace std;

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