条件语句
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 逻辑错误:使用一个超出有效范围的值