通过指针或引用将映射传递给函数?

时间:2018-09-18 13:31:43

标签: c++ pointers reference

我有以下问题: 通过值或const引用传递映射(或向量等)到c ++中的函数的正确方法不是一种选择,因为映射必须在函数内更改,并且更改也应在外部查看功能?

我的函数test1导致分段错误11.发生这种情况是因为指针显然没有携带任何大小信息吗?

函数test2可以正常工作,但是flymake-google-cpplint说“这是非常量引用吗?如果是,则使用const或使用指针”。

#include <iostream>
#include <map>
using namespace std;

void test1(map<int, int> *memo) {
  auto it = memo->find(1);
}

void test2(map<int, int> &memo) {

}

int main() {

  map<int, int> *memo;
  memo->insert(make_pair(1,1));

  return 0;
}

您会推荐什么解决方案?

非常感谢

M

2 个答案:

答案 0 :(得分:2)

第一件事是您的代码有错误。

map<int, int> *memo;

从未初始化,这就是为什么您会遇到分段错误的原因。您真正想要的是跳过指针

map<int, int> memo;

并通过引用或指向对象(test1(&memo);的指针)传递对象。

您从 flymake-google-cpplint 收到警告的原因是,由于使用了非恒定引用,因此不清楚对象是否会被突变(更改),请参见{{3 }},以获取更多信息。

我会忽略来自 flymake-google-cpplint 的警告,并使用非恒定引用。这主要是主观的,只要您与使用const一致,就应该清楚函数的预期用途。

答案 1 :(得分:1)

您尝试插入指向map<int, int>的未初始化指针

map<int, int> *memo;
memo->insert(make_pair(1,1));

通过引用传递,这没什么问题。