C++ Primer(第五版)第五章-语句读书笔记。
-
switch语句
两点:
-
case标签中的值必须是整型常量。
case标签:case关键字和后面的字,称为case标签。
-
case中定义变量,要加大括号。
大括号才能建立一个块。块内才能建立内部变量。
-
-
范围for语句(range for statement)
容器需要满足的条件:返回迭代器的begin、end成员。如 大括号包括的元素,string、vector等。
for(auto i : {1,2,3}) std::cout << i ; for(auto i : "123") std::cout << i ; for(auto i : std::string("123")) std::cout << i ;
-
使用
for(auto & r : v){} //声明为引用可更改v中元素 for(auto r : v){} // 只可读
-
不可通过范围for语句修改迭代容器的大小!
因为预存了end()值。(这说明传统for语句每次都会执行end、size等语句的,而没有预存该值?)
-
-
while循环条件判断部分(括号中)可以声明变量
while(int i = get_num())
注意,赋值语句的返回值就是该值,所以如果i为0则循环停止。
-
异常处理结构
try { if( i > 10 ) { throw runtime_error("i must less than 10") ; } } catch(runtime_error re) { cerr << re.what() ; }
异常需要手动抛(其实任何语言应该都是手动抛的…只不过自己在调别人写的函数,别人的函数里抛异常了…);捕获倒是应该比较通用。
附上示例代码:
cin >> a >> b ; try { if( 0 == b) throw runtime_error("divider is zero") ; } catch(runtime_error err) { cerr << err.what() ; return -1 ; } int rst = a / b ; cout << rst << endl ;
try 后面似乎一定要跟上大括号,不能像for、while等单语句时可省略括号。
如果错误没有被catch到,会跳到标准库中的
terminate
函数中。该函数处理退出状态,正常退出也是到这个函数。