这是我分析之前遗留代码时发现的一个隐藏点;不过我并不认为这样使用std::map是合理的。
看看简化后的代码,v1、v2的值应该是多少呢?
#include <map>
std::map<int, int> cm[2];
int get_cm_value(int device, int ctrl)
{
auto &map = cm[device];
switch (map[ctrl])
{
case 0: return 3;
case 1: return 4;
case 2: return 5;
default: return 6;
}
return -3;
}
int main()
{
int v1 = get_cm_value(0, 1);
int v2 = get_cm_value(0, 2);
}
答案是v1、v2的值都是3。原因是:std::map在使用下标访问运算符时,如果元素不存在,则会插入该元素。主函数中的两次调用,使得cm[0]插入了两对初始值。
cm[0][1] = 0;
cm[0][2] = 0;
3824

被折叠的 条评论
为什么被折叠?



