编辑:第一个问题的答案是使用std :: pair.关于第二个的任何想法(标记为'奖金问题')?
使用以下代码:
#include <map>
#include <vector>
void foo(std::pair<int, int>& p) // EDIT: it needs to be non-const
{}
int main()
{
std::pair<int, int> p{1,2};
foo(p);
std::vector<std::pair<int, int>> v{{1,2}};
for (auto& element : v)
{
foo(element); // works fine
}
std::map<int, int> m{std::make_pair(1,2)};
//std::map<int, int> m2{{1,2}};
for (auto& element : m) // the problematic loop
{
foo(element);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我在后者for循环中得到以下消息:
错误:从'std :: pair'类型的表达式初始化'std :: pair&'类型的引用无效
以及m2中的以下内容:
错误:从'std :: pair'类型的右值开始无效初始化'std :: pair&'类型的非const引用
这是为什么?
额外的问题: 我发现非常奇怪的是,当m2的初始化没有被注释掉并且for循环保持不变(其中仍有m并且m2从未使用过)时,错误消息从
错误:从'std :: pair'类型的表达式初始化'std :: pair&'类型的引用无效
至
错误:从'std :: pair'类型的右值开始无效初始化'std :: pair&'类型的非const引用
我很想知道你对它的看法.我用onlinegdb.com测试了这段代码
容器生成密钥const(这适用于所有关联容器):
Run Code Online (Sandbox Code Playgroud)value_type std::pair<const Key, T>
所以它应该是void foo(std::pair<int const, int>& p).
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |