C++的形参问题

来源:百度知道 编辑:UC知道 时间:2024/07/06 21:42:30
func1(const std::string &a){}

func2(const std::string b){}
有什么区别?
func1是把a的引用带进来,但是设置成const是不是不能修改这个引用指向的值,
func2和func1区别只是新定义了一个b,占用了新的内存空间??

最后怎样理解const修饰的是什么部分?
没明白。。。怎么叫太直接了 有什么区别么?
为什么书上总是用第一种方法?
再有定义成const不是不能修改指向的值么- -

func1(const std::string &a){}

func2(const std::string b){}
有什么区别?
答:func1和func2在const参数的情况下能造成使用上的问题只有一点:func2只能传变量,而func1可以传值,举个例子:
const std::string q="Hello";
func2(q);
func2("hello");//func2两个都对。
func1(q);
func1("hello");//Error!!!
func1是把a的引用带进来,但是设置成const是不是不能修改这个引用指向的值?
答:是。
func2和func1区别只是新定义了一个b,占用了新的内存空间??
答:是的。func2是传值,带进来的时候首先要新生成一个在func2作用域内的形参b,在func2结束时销毁。
最后怎样理解const修饰的是什么部分?
答:const修饰的是a/b形参。表示在函数内不能改动a/b的值。

前者&是修改的a所指向的内存的值
后者是修改b所占的内存的值

前者比较好,因为不改变a自身的值,而后者太直接了。