关于“引用传递的参数必须加上const”的疑惑,该怎么处理
关于“引用传递的参数必须加上const”的疑惑
在函数有多个值需要输出的时候,我们可以用引用传递实现输出参数。
但Google的C++编程规范对引用参数的使用建议是:“引用传递的参数必须加上const”,通过指针实现输出。
且规范中说引用传递的缺点仅仅是:“容易引起误解,因为引用在语法上是值却拥有指针的语义”。
又有人对我说当引用传递的参数不是内置参数的话,如:
void fun(std::string &str);
这样的函数在涉及多线程编程时,可能会引起内存泄漏。但我不理解,也不明白上面这个函数跟
void fun(std::string *str);
的安全性有什么区别。
究竟利用引用传递作输出参数有什么实质的缺点???求说明或详细资料!
------解决方案--------------------
Google的意思是:
void fun(std::string &str);
这样的函数我们很难分清楚str究竟是输入参数还是输出参数。
因此推荐这样写:
1、输入参数
void fun(const std::string &str);
2、输出参数
void fun(std::string *str);
------解决方案--------------------
引用相当于常量指针。
比如形参为std::string &str时,这个引用只是指向对应的实参,也就是实参的别名。
而形参为std::string *str时,str是个指针,可以改变其指向的string变量。
------解决方案--------------------
对于string来说,这里只说string类,
输入参数最好是 string const&
输入/输出参数,最好是 string&
几乎就不会出现string单独作为参数类型的情况。
------解决方案--------------------
没什么不好,如果说是多线程的问题,那是多虑了。因为设计不周全的话,多线程的在任何时候都会发生问题。
因为,用引用的好处,相当于限制了函数对实参进行出乎意料的操作。例如
void foo(string*);
当我传递一个指针进去并执行结束,我不能确定我给定的对象会不会被foo delete掉,即使这个对象不是new出来的
------解决方案--------------------
------解决方案--------------------
规矩是人定的,但人不能被规矩死。
规定不许随地大小便,也没见谁被大小便憋死过。(^_^)
------解决方案--------------------
是为了方便代码阅读。
------解决方案--------------------
楼上几位说的很清楚了,就是易读性的问题。安全性问题是由多线程本身产生的,与是使用引用还是指针无关
在函数有多个值需要输出的时候,我们可以用引用传递实现输出参数。
但Google的C++编程规范对引用参数的使用建议是:“引用传递的参数必须加上const”,通过指针实现输出。
且规范中说引用传递的缺点仅仅是:“容易引起误解,因为引用在语法上是值却拥有指针的语义”。
又有人对我说当引用传递的参数不是内置参数的话,如:
void fun(std::string &str);
这样的函数在涉及多线程编程时,可能会引起内存泄漏。但我不理解,也不明白上面这个函数跟
void fun(std::string *str);
的安全性有什么区别。
究竟利用引用传递作输出参数有什么实质的缺点???求说明或详细资料!
------解决方案--------------------
Google的意思是:
void fun(std::string &str);
这样的函数我们很难分清楚str究竟是输入参数还是输出参数。
因此推荐这样写:
1、输入参数
void fun(const std::string &str);
2、输出参数
void fun(std::string *str);
------解决方案--------------------
引用相当于常量指针。
比如形参为std::string &str时,这个引用只是指向对应的实参,也就是实参的别名。
而形参为std::string *str时,str是个指针,可以改变其指向的string变量。
------解决方案--------------------
对于string来说,这里只说string类,
输入参数最好是 string const&
输入/输出参数,最好是 string&
几乎就不会出现string单独作为参数类型的情况。
------解决方案--------------------
没什么不好,如果说是多线程的问题,那是多虑了。因为设计不周全的话,多线程的在任何时候都会发生问题。
因为,用引用的好处,相当于限制了函数对实参进行出乎意料的操作。例如
void foo(string*);
当我传递一个指针进去并执行结束,我不能确定我给定的对象会不会被foo delete掉,即使这个对象不是new出来的
------解决方案--------------------
------解决方案--------------------
规矩是人定的,但人不能被规矩死。
规定不许随地大小便,也没见谁被大小便憋死过。(^_^)
------解决方案--------------------
是为了方便代码阅读。
------解决方案--------------------
楼上几位说的很清楚了,就是易读性的问题。安全性问题是由多线程本身产生的,与是使用引用还是指针无关