传递参数有三种方式:按值、使用指针和按引用。
按值:将创建参数的新副本。对于像这样的大物体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