- 为什么不要在switch语句内部定义变量?
考虑这样一种情况: 如果我们在switch语句的某个case中定义了一个变量并显示初始化, 而在另一个case中要用到这个变量, 那么当程序执行时跳过了定义变量的case时, 程序报错”变量由case标签跳过”(VS2015实测).
再考虑另一种情况: 如果我们在switch语句的某个case中定义了一个变量但不显式初始化, 而在另一个case中要用到这个变量, 那么当程序执行时跳过了定义变量的case时, 程序报错”使用了未初始化的变量”(VS2015实测).
事实上, C++规定: 从作用域之外定义变量且初始化的某处跳转到作用域之内使用变量的某处是非法的.
- 范围for语句的语法
// 范围for
for (declaration : expression)
statement
expression必须是一个序列, 比如花括号扩起来的初始化列表, 数组, vector, string等类型的对象, 其共同特点是拥有能返回迭代器的begin和end成员.
declaration定义一个变量, 序列中的每个元素都得能转换成该变量的类型.(使用auto类型说明符和引用)
首先将declaration的变量初始化为序列的第一个元素, 然后执行statement, 之后将第二个元素赋给变量, 再执行statement, 直到序列尾.
vector<int> v = {0,1,2,3,4,5};
// 需要改变v中的元素, 使用引用
for(auto &r : v)
{
r *= 2; // v中每个值翻倍
}
- break, continue, goto应该怎么用?
- break
作用于离他最近的循环语句(for, while, do while)和switch语句. 也就是说break用来结束循环(是终止所有循环, 而不仅仅是本次循环), 或者跳出switch.. - continue
只能作用于离他最近的循环语句(for, while, do while). continue用来结束本次循环(仅仅是本次循环). - goto
坚决不用.
- break
- C++中的异常处理机制
异常是程序运行过程中程序本身无法处理的反常情况.
异常处理机制包括异常检测和异常处理两部分.
异常检测使用throw表达式来表示遇到了异常.
异常处理使用try-catch语句块处理异常
呃… 不扯了, 并没有看懂什么异常处理, 以后再说吧.. 且贴一个知乎上关于要不要用异常的问题. 对使用 C++ 异常处理应具有怎样的态度?