C/C++ debug(一)
C/C++ debug(二)
C/C++ debug(三)
C/C++ debug(四)
return m[key]
对于一个 map 容器,先判断键值是否存在,就直接返回,恰因为不会保错,返回 Value 的默认值,而容易引发逻辑错误。
需首先判断 key 是否存在,可用 find() 判断是否存在该 key:
m.find(key) == m.end();
所以:
assert(m.find(key) != m.end());
return m[key];
if vs else if
- (1)if、else if:在数学意义上表达的是对样本空间的划分,
(2)划分是没有交集的划分,刻画的是泾渭分明的概念。
换句话说, A∩B≠ϕ ,是不可以:if (A){ ... } else if (B){ ... }
也即两个有交集的断言是不可以分别放在 if 和 else 里的;
if (A){
...
} else if(B){
...
} else {
...
}
如下的判断逻辑刻画的是如下的空间划分:
switch:错误,控制传输跳过的实例化
如下:
while ((key = getchar()) != 'q')
{
switch (key)
{
case 'f':
string filename;
cin >> filename;
break;
...
}
}
便会在 switch 处提示错误:控制传输跳过的实例化,问题出现在 string filename 这一局部变量的位置上,解决方法:
(1)使用大括号括起来
case 'f': { string filename; cin >> filename; break; }
(2)为了维持 case 分支风格的统一,将 case 中的局部变量声明的语句置于 switch 的外部
string filename; while ((key = getchar()) != 'q') { case 'f': cin >> filenmae; ... break; }