常见情况:
一般来说,什么是好的做法.我总是感到困惑.首先,将所有内容作为引用传递似乎是一致的,但是不可能将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;
}
Run Code Online (Sandbox Code Playgroud)
谢谢Ajay
Dav*_*ley 26
参考文献更容易正确.
您的文字问题是您没有使用const引用吗?您不能将临时(由文字生成)绑定到非const引用,因为更改它是没有意义的.您可以将一个绑定到const引用.
特别是,当一个参数传递给一个函数,并且该函数不会改变它,并且它不是一个内置类型时,传递const引用.它与pass by value非常相似,除了它不需要复制构造函数调用.
指针有用,因为它们具有可以测试的保证无效值.有时这是无关紧要的,有时它非常重要.当然,你通常不能通过指针传递文字,除非(如果是字符串文字)它已经是.
一些编码标准表示非const引用不应该传递任何内容,因为它在调用时没有提供参数可能被函数更改的指示.在这种情况下,您将被要求通过指针.我不赞成这一点,特别是因为编程工具使得获取函数签名变得更容易和容易,因此您可以查看函数是否可以更改参数.但是,在组或企业中工作时,样式一致性比任何单个样式元素更重要.
小智 6
在我之前的工作中,我们的规则是普通的引用实际上从未使用过.相反,我们同意:
const引用传递(用于只读访问大对象)如果每个人都遵循这些规则,您可以假设传递给函数的参数不会被修改,除非他们的地址被采用.它对我们有用.
我真的不明白你为什么遇到这些麻烦:
std::map < std::string, std::vector<std::string> > adjacencyMap;
std::vector<std::string>& sFriends = adjacencyMap["s"];
sFriends.push_back("a");
sFriends.push_back("v");
sFriends.push_back("g");
Run Code Online (Sandbox Code Playgroud)
你为什么干涉shared_ptr这里?这种情况肯定不需要它!
| 归档时间: |
|
| 查看次数: |
21529 次 |
| 最近记录: |