我有以下问题: 通过值或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
答案 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));
通过引用传递,这没什么问题。