请教C++ 中函数的参数加了& 加了const 有什么作用和区别

请问C++ 中函数的参数加了&, 加了const 有什么作用和区别?
请问C++ 中函数的参数加了&, 加了const 有什么作用和区别?

比如

定义
fun(int* in, const std::string& str)
{

}

一个参数都不加, 如 std::string str 和 std::sring& str 的区别是什么呢?
std:: string str 和 const::string str 使用的区别是什么呢?
如果把 const 和& 都加上又有什么不同呢?


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


class 成员 加上const 或者 & 有什么特别作用吗?

谢谢解答。




------解决方案--------------------
看书上const和引用那部分
const在这里是指不能修改
引用作参数不创建临时变量
------解决方案--------------------
不加引用的话,str则被复制一份,函数中对str的操作实质上是对其复制品的操作,所以即使在函数中修改了str,调用层的原str并不会被改变。

加了引用的话,传入的str即是调用层的实际参数,这样省却了复制过程,效率会有提高。但如果函数中修改了str,则原str也会改变,因为其实是同一个东西。

有时候为了追求效率,又希望避免改变原来的str,则可在引用的基础上加const修饰,这样函数中就不能再修改str的内容(否则会编译出错)。
------解决方案--------------------
std::sring& str 是引用,传递过来的就是str本身,在函数里修改str的话都会修改str本身
std::string str则不会,它只是个副本

const::string str 表示str是const的,即不可修改的
const::string& str 表示str是const的引用,也是不可修改的,const属性一般用引用传递

class加const是防止你修改数据,加&在对象比较复杂的时候可以提高效率,而且有时需要在函数调用里修改参数的值就传引用进去比较方便
------解决方案--------------------
string& str表示参数str是按址传送的,但你在形式上可以按值使用,如果没有&将按值传送,导致数据拷贝,对于string这样的数据类型效率极其低下。
const表示在你的函数fun()内不能修改参数
------解决方案--------------------
一个参数都不加, 如 std::string str 和 std::sring& str 的区别是什么呢? 
std:: string str 和 const::string str 使用的区别是什么呢? 
 答:std:: string str ,则str可以被修改,而const::string str ,则str不能被修改。
如果把 const 和& 都加上又有什么不同呢? 

答:对于有&,则不会调用拷贝构造函数,也就不会生成副本,函数里实际操作的是实参本身。
对于没有&,则会调用拷贝构造函数,生成实参的副本,你实际操作的是实参的副本,而不是实参本身。

std::string str和std::sring& str(单加 &)和const::string str (单加 const)和const::string& str(const和 &都加了) 4者有何区别呢?分别都是什么情况用? 
答:std::string str,str可以被修改,而且会调用拷贝构造函数。
std::sring& str,str可以被修改,但不会调用拷贝构造函数。
const::string str ,str不能被修改,但会调用拷贝构造函数。
const::string& str,str不能被修改,而且也不会调用拷贝构造函数。

class 成员 加上const 或者 & 有什么特别作用吗? 
作用比较多,看书吧


------解决方案--------------------
探讨
请问C++ 中函数的参数加了&, 加了const 有什么作用和区别?

比如

定义
fun(int*  in, const std::string& str)
{

}

一个参数都不加, 如 std::string str 和 std::sring& str 的区别是什么呢?
std:: string str 和 const::string str  使用的区别是什么呢?
如果把 const 和& 都加上又有什么不同呢?


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


class 成员 加上const 或者 & 有什么特别作用吗?

谢谢解答。


------解决方案--------------------
不加& 是复制副本 ,加&表示引用(就是他自己),不复制副本

const 不能修改数据 !
------解决方案--------------------
const和引用是两个独立的概念,可以分别理解,然后再看组合就容易了