函数参数中的const和&用法

经常会看到如下函数实现:
fun(int* in, const std::string& str)
{

}

请问std::string str和std::sring& str(单加 &)和const std::string str (单加 const)和const std::string& str(const和 &都加了) 4者有何区别呢?分别都是什么情况用?

答:std::string str,str可以被修改,而且会调用拷贝构造函数。
std::sring& str,str可以被修改,但不会调用拷贝构造函数。
const std::string str ,str不能被修改,但会调用拷贝构造函数。
const std::string& str,str不能被修改,而且也不会调用拷贝构造函数。

有时候为了追求效率减少复制,又希望避免改变原来的str,则可在引用的基础上加const修饰,这样函数中就不能再修改str的内容(否则会编译出错),此时就会使用第四种场景。

你可能感兴趣的:(C++)