我在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?有没有指针有什么区别?
答案 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传递给函数时来到你的问题,使用引用变量,因为没有参数的副本发生,因此它会更快,并且引用也比指针更安全