经常会看到如下函数实现:
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的内容(否则会编译出错),此时就会使用第四种场景。