条件语句
if (grade % 10 >= 3)
if (grade % 10 > 7)
...
else
...
if (grade % 10 >= 3)
{
if (grade % 10 > 7)
...
} else
...
- switch语句执行跳过某个特定case而执行另一个case,如果有个变量定义在前面的case而使用在后面的case,此时将发生绕过初始化直接使用的错误。所以要在某个分支定义并初始化一个变量,就应该把变量定义在块内,以此让后面的case标签都在变量的作用域之外
case true:
{
string s = ....;
...
}
break;
case false;
if (s)
迭代语句
vector<int> v = {1, 2, 3};
for(auto &r : v)
r *= 2;
- 下面do-while中condition中使用的变量必须定义在循环体之外
do
statement;
while (condition);
try语句和异常处理
- 异常检测部分使用throw表示遇到了无法处理的问题
if (item1.isbn() == items.isbn())
...
else
{
cout << "Error!\n";
return -1;
}
if (item1.isbn() != item2.isbn())
throw runtime_error("xxx");
cout << item1 + item2 << endl;
while (cin >> item1 >> item2)
{
try
{
if (item1.isbn() != item2.isbn())
throw runtime_error("xxx");
cout << item1 + item2 << endl;
} catch (runtime_error err)
{
cout << err.what()
<< "\nTry Again? Enter y or n" << endl;
char c;
cin >> c;
if (!cin || c == 'n')
break;
}
}
- try可能调用包含另一个try的函数,而新的try可能又调用另一个包含try的新函数。但是异常被抛出时会先搜索抛出该异常的函数,如果没匹配到catch,会终止该函数,然后在调用该函数的函数中继续寻找catch…依此沿着执行路径逐层回退直到找到catch。如果到最后都没找到catch,会执行terminate终止程序
runtime_error | 运行时才能检测出的问题 |
---|
range_error | 运行时错误:生产的结果超出了有意义的值域范围 |
overflow_error | 运行时错误:计算上溢 |
underflow_error | 运行时错误:计算下溢 |
logic_error | 逻辑错误 |
domain_error | 逻辑错误:参数对应的结果值不存在 |
invalid_argument | 逻辑错误:无效参数 |
length_error | 逻辑错误:试图创建一个超出该类型最大长度的对象 |
out_of_range | 逻辑错误:使用一个超出有效范围的值 |