常见情况:将std :: string传递给函数foo(std :: string *)或foo(std :: string&);将tr1 :: shared_ptr传递给函数foo(tr1 :: shared_ptr * ptr)或foo(tr1 :: shared_ptr&ptr);通常,什么是良好实践。我总是很困惑。最初,将所有内容作为引用传递似乎是一致的,但是不可能将Literals作为引用传递或将NULL作为引用传递。同样,将所有内容都用作指针看起来不错,但随后我不得不担心指针可能指向NULL并在该函数的开头检查这些条件。您认为以下代码片段好吗?#include <iostream>#include <vector>#include <map>#include <string>#include <tr1/memory>#include <algorithm>using namespace std;using namespace std::tr1;int main(){ map<string, shared_ptr<vector<string> > > adjacencyMap; vector<string>* myFriends = new vector<string>(); myFriends->push_back(string("a")); myFriends->push_back(string("v")); myFriends->push_back(string("g")); adjacencyMap["s"] = shared_ptr<vector<string> >(myFriends); return 0;}谢谢阿杰
3 回答
慕村225694
TA贡献1880条经验 获得超4个赞
引用更容易正确。
您使用的文字不是使用const引用吗?您不能将临时(由文字产生)绑定到非常量引用,因为更改一个临时引用是没有意义的。您可以将一个绑定到const引用。
特别是,当将参数传递给函数时,该函数将不会对其进行更改,并且它不是内置类型,请通过const引用传递。它的工作原理与按值传递大致相同,不同之处在于它不需要复制构造函数调用。
指针很有用,因为它们具有可以测试的保证无效值。有时这是无关紧要的,有时这是非常重要的。当然,通常不能通过指针传递文字,除非(在字符串文字的情况下)已经存在。
一些编码标准说,非const引用不应该传递任何内容,因为在调用时它没有提供参数可能由函数更改的指示。在这种情况下,将要求您通过指针传递。我不赞成这样做,特别是因为编程工具使获取函数签名变得越来越容易,因此您可以查看函数是否可以更改参数。但是,在团队或企业中工作时,样式一致性比任何单个样式元素都重要。
- 3 回答
- 0 关注
- 724 浏览
添加回答
举报
0/150
提交
取消